Postgres – Habilitar dblink no windows

Para quem já utilizou o linked server no sql server, um dia pode se deparar com a necessidade de criar um link com um servidor remoto e executar uma consulta em um banco remoto.

Pensando nisso, vou demonstrar aqui como criar o linkedserver do postgresql, neste caso chamado de dblink.

O postgres traz nos seus arquivos um chamado dblink.sql, no caso do windows, você pode executar este script que assim então estará liberadas as funções/store procedures do dblink.

O script deve estar em:

  • Versão 9.0 : C:\Program Files\PostgreSQL\9.0\share\contrib

Caso não encontre o script é esse:

-- dblink_connect now restricts non-superusers to password
-- authenticated connections
CREATE OR REPLACE FUNCTION dblink_connect (text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_connect (text, text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT;

-- dblink_connect_u allows non-superusers to use
-- non-password authenticated connections, but initially
-- privileges are revoked from public
CREATE OR REPLACE FUNCTION dblink_connect_u (text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT SECURITY DEFINER;

CREATE OR REPLACE FUNCTION dblink_connect_u (text, text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT SECURITY DEFINER;

REVOKE ALL ON FUNCTION dblink_connect_u (text) FROM public;
REVOKE ALL ON FUNCTION dblink_connect_u (text, text) FROM public;

CREATE OR REPLACE FUNCTION dblink_disconnect ()
RETURNS text
AS '$libdir/dblink','dblink_disconnect'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_disconnect (text)
RETURNS text
AS '$libdir/dblink','dblink_disconnect'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_open (text, text)
RETURNS text
AS '$libdir/dblink','dblink_open'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_open (text, text, boolean)
RETURNS text
AS '$libdir/dblink','dblink_open'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_open (text, text, text)
RETURNS text
AS '$libdir/dblink','dblink_open'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_open (text, text, text, boolean)
RETURNS text
AS '$libdir/dblink','dblink_open'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_fetch (text, int)
RETURNS setof record
AS '$libdir/dblink','dblink_fetch'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_fetch (text, int, boolean)
RETURNS setof record
AS '$libdir/dblink','dblink_fetch'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_fetch (text, text, int)
RETURNS setof record
AS '$libdir/dblink','dblink_fetch'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_fetch (text, text, int, boolean)
RETURNS setof record
AS '$libdir/dblink','dblink_fetch'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_close (text)
RETURNS text
AS '$libdir/dblink','dblink_close'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_close (text, boolean)
RETURNS text
AS '$libdir/dblink','dblink_close'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_close (text, text)
RETURNS text
AS '$libdir/dblink','dblink_close'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_close (text, text, boolean)
RETURNS text
AS '$libdir/dblink','dblink_close'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink (text, text)
RETURNS setof record
AS '$libdir/dblink','dblink_record'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink (text, text, boolean)
RETURNS setof record
AS '$libdir/dblink','dblink_record'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink (text)
RETURNS setof record
AS '$libdir/dblink','dblink_record'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink (text, boolean)
RETURNS setof record
AS '$libdir/dblink','dblink_record'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_exec (text, text)
RETURNS text
AS '$libdir/dblink','dblink_exec'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_exec (text, text, boolean)
RETURNS text
AS '$libdir/dblink','dblink_exec'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_exec (text)
RETURNS text
AS '$libdir/dblink','dblink_exec'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_exec (text,boolean)
RETURNS text
AS '$libdir/dblink','dblink_exec'
LANGUAGE C STRICT;

CREATE TYPE dblink_pkey_results AS (position int, colname text);

CREATE OR REPLACE FUNCTION dblink_get_pkey (text)
RETURNS setof dblink_pkey_results
AS '$libdir/dblink','dblink_get_pkey'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector, int, _text, _text)
RETURNS text
AS '$libdir/dblink','dblink_build_sql_insert'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector, int, _text)
RETURNS text
AS '$libdir/dblink','dblink_build_sql_delete'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector, int, _text, _text)
RETURNS text
AS '$libdir/dblink','dblink_build_sql_update'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_current_query ()
RETURNS text
AS '$libdir/dblink','dblink_current_query'
LANGUAGE C;

CREATE OR REPLACE FUNCTION dblink_send_query(text, text)
RETURNS int4
AS '$libdir/dblink', 'dblink_send_query'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_is_busy(text)
RETURNS int4
AS '$libdir/dblink', 'dblink_is_busy'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_get_result(text)
RETURNS SETOF record
AS '$libdir/dblink', 'dblink_get_result'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_get_result(text, bool)
RETURNS SETOF record
AS '$libdir/dblink', 'dblink_get_result'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_get_connections()
RETURNS text[]
AS '$libdir/dblink', 'dblink_get_connections'
LANGUAGE C;

CREATE OR REPLACE FUNCTION dblink_cancel_query(text)
RETURNS text
AS '$libdir/dblink', 'dblink_cancel_query'
LANGUAGE C STRICT;

CREATE OR REPLACE FUNCTION dblink_error_message(text)
RETURNS text
AS '$libdir/dblink', 'dblink_error_message'
LANGUAGE C STRICT;

Cole-o no seu editor e execute.

Se executar com sucesso, seu dblink está ativado.

Alguns exemplos de como utilizar:

SELECT tab01.codigo,tab02.codigo
FROM tabela01 tab01
INNER JOIN (SELECT * FROM dblink(‘conexao’,'SELECT codigo FROM tabela02') AS resultado(codigo integer)) tab02 ON tab01.codigo=tab02.codigo;

---------------

select *
from dblink
   (
    'dbname=nomeDoSeuBanco
     hostaddr=10.0.0.11
     user=postgres
     password=postgrepwd
     port=5432',

    'select id
     from suaTabela
    '
   ) as resultado(idRemoto integer); 

--------------

select *
from dblink
   (
    'dbname=nomeBanco
     hostaddr=10.0.0.11
     user=postgres
     password=senha
     port=5432',

    'select *
     from baixa_pv_volume
    '
   ) as t1(idRemoto integer,pvRemoto varchar(10), itemRemoto varchar(10),volumeRemoto integer,
	   data_geracaoRemoto timestamp, usuario_idRemoto integer, deletadoRemoto boolean,
	   empresa_idRemoto varchar(2)); 

-------------

select remota.deletadoRemoto,local.deletado,*
from tabelaLocal local
inner join (select * from dblink('dbname=nomeBanco hostaddr=10.0.0.11 user=postgres password=senha
		port=5432', 'select * from tabela' ) as resultado(idRemoto integer,pvRemoto varchar(10), itemRemoto varchar(10),volumeRemoto integer,
	   data_geracaoRemoto timestamp, usuario_idRemoto integer, deletadoRemoto boolean,
	   empresa_idRemoto varchar(2))) remota on remota.idRemoto = local.id
where remota.deletadoRemoto <> local.deletado

Caso deseje habilitar no línux:

O primeiro passo é instalar o DBLink no banco. Aqui vou considerar que a instalação do PostgreSQL foi realizada de forma compilada e para isso será necessário fazer uso dos arquivos da instalação. Dentro do diretório existe um diretório denominado contrib e dentro deste diretório existe um subdiretório chamado dblink. Para instalar o dblink é necessário realizar a compilação e posteriormente adiciona-lo ao banco desejado.

Para compilar é necessário executar o seguinte comando:

make

make install

Após a execução dos comandos acima será gerado um arquivo chamado dblink.sql. Este arquivo deve ser carregado (importado) no banco desejado. Para demonstrar o seu uso trabalharei com os bancos: banco01 e banco02.

O banco banco01 possui um tabela chamada tabela01 e o banco02 possui uma tabela chamada tabela02. Cada tabela possui um atributo código do tipo inteiro e ambas as tabelas contém 10 registros.

Carregando o arquivo dblink.sql no banco01.

psql banco01 -f dblink.sql

Com o dblink carregado no banco01, o próximo passo é realizar a conexão entre o banco01 e o banco02.

No exemplo, será considerado que estando conectado no banco01 será requisitada uma conexão com o banco02 para ai sim possibilitar a troca de informações entre os dois bancos de dados.

Então vamos a prática:

banco01=# SELECT dblink_connect(‘conexao’,'host=localhost port=9999 user=postgres dbname=banco02′);
dblink_connect
—————-
OK
(1 row)

Alguns parâmetros são informados. O primeiro é um nome para a conexão, e o restante parâmetros normais de uma conexão: hostname, porta, usuário, senha (opcional) e o nome do banco. Como para este exemplo a autenticação esta usando o método trust, o parâmetro password foi omitido.

Com a conexão OK agora é só realizar uma operação qualquer.

Por exemplo, um join entre a tabela01 que pertence ao banco01 e a tabela02 que pertence ao banco02.

banco01=# SELECT tab01.codigo,tab02.codigo FROM tabela01 tab01 INNER JOIN (SELECT * FROM dblink(‘conexao’,'SELECT codigo FROM tabela02′) AS resultado(codigo integer)) tab02 ON tab01.codigo=tab02.codigo;

Um outro exemplo pode ser feito com uma operação de escrita (INSERT, UPDATE OU DELETE).

A partir do banco01 fazendo uma chamada de inserção na tabela02 que está no banco02.

banco01=# SELECT dblink_exec(‘conexao’,'INSERT INTO tabela02 VALUES (generate_series(11,20))’);
dblink_exec
————-
INSERT 0 10
(1 row)

Conferindo:

banco01=# SELECT * FROM dblink(‘conexao’,'SELECT codigo FROM tabela02′) AS resultado(codigo integer);
codigo
——–
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(20 rows)

Para operações de UPDATE e DELETE o procedimento transcorre da mesma maneira do que do comando INSERT.

Por fim, para encerrar a conexão é necessário executar a seguinte função:

banco01=# SELECT dblink_disconnect(‘conexao’);
dblink_disconnect
——————-
OK
(1 row)

Dicas para a instalação do Línux foi retirada do blog: http://jotacomm.wordpress.com/
acesse caso deseje mais informações.

 

Fuente: http://www.jardelmorais.com/banco-de-dados/postgres/ddl-postgres/postgres-habilitar-dblink-no-windows/

PostgreSQL Installer

 

To download the latest version of the installer, look in the win32 subdirectory on your nearest PostgreSQL mirror . Development versions are also available on the pgFoundry page.

Please read the FAQ before you begin.

Instructions are also available on how to make a silent install.

If you need support, please use the available mailing lists . If your issue is specifically with the installer, please use the list and trackers available on the pgFoundry page.


Contribute a translation.
If a language you find here isn’t included in your distribution package, you can easily upgrade your installation to support that additional translation.
List of translators for pginstaller.

Installer walkthrough

The PostgreSQL installer is based on Windows Installer, so it should be familiar to most Windows users. Following is a quick walkthrough of the installer steps.

  1. Language selection
    Select the language you want to use for the installer. This only sets the language used in the install wizard – the actual installed PostgreSQL can be installed with or without language support and has it’s own language choice independent from the installer.
    You can also select if you want the installer to create a detailed logfile of the installation process. Note that this logfile will contain both the service user and database superuser password if created.
    Installer screenshot
  2. Introduction screen
    Introduction message. Just click Next to get started.
    Installer screenshot
  3. Welcome message and instructions
    As always, please read the complete instructions before you continue.
    Installer screenshot
  4. Feature selection
    Select what you want to install. The server part will only be available on NT based platforms. Note that the ‘Data Directory’ option may only be installed on an NTFS partition. If you wish to install the data directory on any other partition type, you will need to run initdb.exe manually after installation.
    You can change the directory of the entire installation by selecting the feature PostgreSQL and click Browse to pick the new directory. You can also change the directory of an individual feature (such as the server, or pgAdmin) by selecting that feature and clicking Browse.
    Installer screenshot
  5. Service installation
    Choose whether you want PostgreSQL installed as a service, and if so specify which account should be used. This account will be created and granted the Logon On as a Service right if required.
    Installer screenshot
  6. Initdb
    Chose whether you want a database cluster to be initialized in the database. If so, choose character set and encoding for your database, and specify login details for the database superuser. You may also specify a non-default port number to run the server on, and opt to listen for connections on all IP addresses on the system rather than just localhost. Note that you will still have to enable access in the host based authentication configuration (pg_hba.conf) to allow remote users to connecto the server.
    This dialog is only available if you chose to install PostgreSQL as a service.

    Installer screenshot
  7. Procedural languages
    Chose the procedural languages you want activated in template1. All PL files are always installed, this step just activates them by default in all your databases.
    This dialog is only available if you chose to install PostgreSQL as a service, and chose to have a database cluster initialized.
    Only the languages where the corresponding runtimes were found installed on the system are available for selection.
    PL/perl requires ActiveState Perl 5.8 to be installed (5.10 for PostgreSQL 8.4 and above).
    PL/python requires Python 2.4 to be installed (2.6 for PostgreSQL 8.4 and above).
    PL/tcl requires ActiveState Tcl 8.4 to be installed (8.5 for PostgreSQL 8.4 and above).
    PL/java requires a valid Sun Java Runtime Environment to be installed.
    Installer screenshot
  8. Contrib modules
    Select the contrib modules to activate in template1. All contrib files are always installed, this step just activates them by default in all your databases.
    This dialog is only available if you chose to install PostgreSQL as a service, and chose to have a database cluster initialized.
    Note: The Adminpack module is installed by default because pgAdmin will use it to provide enhanced functionality. It may be removed if you do not want it to be installed in all databases; pgAdmin will simply not offer the enhanced functionality it allows.
    Installer screenshot
  9. Ready to install
    Just click Next to start the actual installation.
    Installer screenshot
  10. Installing
    A progress bar is shown during the installation.
    On some versions of Windows (notably Windows XP before Service Pack 2 and Windows 2003 before Service Pack 1 – see Microsoft Knowledge Base article Q818858 ) a Command Prompt window will appear during the “Initializing database cluster” step. Don’t close this window – it will automatically close once the operation is complete.
    Installer screenshot
  11. Finished
    Installation is complete. You can now go ahead and test your installation and subscribe to the pgsql-announce mailing list to keep up to date.
    If you need to add or remove a feature from PostgreSQL, use the Add/remove programs feature in the Control Panel.
    Installer screenshot
  12. Stack Builder
    Stack Builder may be run at the end of the installation, or from the Start Menu. It may be used to download and install additional components, drivers and applications to complement any of your PostgreSQL installations on the local machine, or on a remote server. The packages offered will be targetted to the version of the server you select here, unless you select <Remote Server>, in which case all packages will be offered.
    Stack Builder initial screenshot
  13. Software selection
    Select the packages you wish to install. If a package is dependent on another package, it will automatically be selected as well.
    Software selection screenshot
  14. Mirrer site selection
    Please select a mirrer site to download from.
    Mirrer site selection screenshot
  15. Review the download selection
    The software to be installed is shown for review. If you need to make any changes, use the back button.
    Review selection screenshot
  16. Download and installation
    Stack Builder will download each of the packages you have chosen and install them in the order required to satisfy any inter-dependencies.
    Downloading…
    Downloading screenshot
    Confirmation …
    Installation confirmation screenshot
    Installation start…
    Package installation screenshot
  17. Installation complete
    Once the download and installation process has completed, Stack Builder will show a summary, indicating any problems encountered.
    Completed screenshot

Fuente: http://pginstaller.projects.postgresql.org/

Cómo obtener datos entre diferentes base de datos

A veces es necesario poder copiar datos entre diferentes bases de datos, que incluso pueden residir en diferentes servidores. Postgresql proporciona una librería interesante para poder realizar dicho cometido.

DBlink consta de un conjunto de funciones diseñadas para realizar conexiones entre bases de datos Postgres, en el mismo server o en otros.. lo que se necesita es instalar DBlink en el servidor que hace la peticion..

Para implementar esto debes instalar el paquete contrib de la version que usas de postres

?

1 # aptitude install postgresql-contrib-8.3

el contrib de postgres provee una serie de funciones muy utiles para desarrolladores y administradores.

Para instalar la funcion en tu BD debes ser el usuario postgres y por lineas de comando:

?

1 $ cd /usr/share/postgresql/8.3/contrib

2 $ psql test_db u_test -h localhost < dblink.sql

Te conectas a la BD que tiene instalado el DBlink y realizas la consulta

?

1 $ psql test_db u_test -h localhost

La idea es trear datos de la BD my_db que esta en el servidor 191.168.50.90 y mostrarlos en la conexion establecida en test_db en localhost

?

1 test_db=# select * from

2 dblink ('dbname=my_db hostaddr=191.168.50.90 user=u_test password=123456 port=5432',

3 'select id,descripcion from tabla')  as t1(id int4,descripcion text);

Por ejemplo:

En la bbdd1 creamos una tabla:

psql dbtest CREATE TABLE tblB (id serial, time integer);

INSERT INTO tblB (time) VALUES (5000), (2000);

En la bbd2, creamo otra tabla, y la alimentaremos desde la tabla que reside en otra instancia:

psql postgres CREATE TABLE tblA (id serial, time integer);

INSERT INTO tblA     SELECT id, time      FROM dblink(‘dbname=dbtest’, ‘SELECT id, time FROM tblB’)     AS t(id integer, time integer)     WHERE time > 1000;

illatà !

Fuente: http://clippingme.wordpress.com/2011/12/12/postgresql-como-obtener-datos-entre-diferentes-base-de-datos/

Error a nivel de transporte en la conexión a Analysis Services

Es una incidencia bastante común cuando nos encontramos un servidor de Analysis Services fuera del dominio y queremos conectar a través de Excel a un cubo de una base de datos OLAP que este ubicada en ese servidor y especificamos utilizar credenciales de Windows:

“An error was encountered in the transport layer”

Se ha detectado un error a nivel de transporte

SSAS Error Se ha detectado un error a nivel de transporte

Si lanzamos una traza al servidor de Analysis Services, con los eventos ‘Audit Login’, ‘Audit Logout’ y ‘Session Initialize’, y volvemos a probar la conexión. Podemos observar que no se están enviando las credenciales correctas:

image

Esta trasladando credenciales anónimas.. Sorpresa

Para solucionarlo, simplemente hay que cambiar la opción de utilizar Credenciales de Windows ‘Utilizar el siguiente usuario y contraseña’ y especificar unas credenciales de Windows con permisos sobre la base de datos OLAP a la que deseemos conectar:

SSAS Se ha detectado un error a nivel de transporte

Espero que esta información les sea de utilidad Sabelotodo

Saludos!

Fuente:

http://bifase.blogspot.com/2011/11/error-nivel-de-transporte-en-la.html

Introducción a la seguridad de dimensión en SQL Server Analysis Services 2005 SSAS

Problema
que he visto la punta de la dinámica de control de datos de filtrado de SQL Server Reporting Services , que mostraron la forma de aprovechar un cuadro Servidor de base de datos SQL a los datos de ventas de filtros basados ​​en el usuario que ejecuta el informe. Tengo un requisito similar para implementar el filtrado dinámico, excepto mis datos en un SQL Server Analysis Services (SSAS) del cubo y los usuarios la consulta de los datos con una variedad de diferentes herramientas. ¿Cómo se puede implementar la seguridad dinámica, en mi caso?

Solución
SSAS tiene un modelo de seguridad robusto que proporciona para el filtrado dinámico a través de un modelo de seguridad basado en roles. Crear funciones y asignar usuarios de Windows, los grupos de Windows, o ambos a ser miembros de una función, a continuación, especificar diversos ajustes de seguridad para cada función. 

A modo de ejemplo, he creado un cubo de SSAS sobre la base de la base de datos de SQL Server utilizado en la punta antes mencionados en el enunciado del problema. La estructura del cubo es la siguiente:

Nuestra tarea consiste en filtrar dinámicamente la lista de cargos sobre la base del usuario que accede al cubo. Si el usuario consulta el cubo de Excel, cuando el usuario arrastra la dimensión de la Oficina en las filas o columnas de una tabla dinámica, queremos que la lista de las oficinas para incluir solo las oficinas que el usuario tiene permiso para ver.Vamos a configurar la seguridad basada en el cubo para llevar a cabo de la siguiente manera:

  • Papel de CEO puede ver todas las oficinas

  • Papel ManagerRegion1 puede ver las oficinas de Baltimore, Filadelfia y Wilmington

  • Papel BaltimoreSales sólo pueden ver la oficina de Baltimore

Configuración de la seguridad basada en el Cubo

Para empezar, abra SQL Server Management Studio (SSMS), vaya a la exploración de objetos, y conectarse a su servidor de Analysis Services. Ubique el cubo en el Explorador de objetos, como se muestra a continuación:

Haga clic derecho en el nodo Funciones, a continuación, seleccione Nuevo papel para poner en marcha el diálogo Crear una función como se muestra a continuación:

He llamado a esta BaltimoreSales papel, sino que se utiliza para conceder acceso a la oficina de ventas de Baltimore datos a las personas adecuadas. Haga clic en Miembros en la lista Seleccionar una página del cuadro de diálogo Crear función para especificar los miembros de esta función:

El cuadro de diálogo anterior tiene un botón Añadir en la esquina inferior derecha (no se muestra arriba), haga clic en ese botón para localizar a los usuarios de Windows y / o grupos de Windows para agregar a esta función. En el ejemplo anterior he añadido un solo usuario a la función.

Haga clic en los cubos en la lista Seleccionar una página del cuadro de diálogo Crear función de permitir el acceso papel BaltimoreSales al cubo:

Haga clic en Dimension Data en la lista Seleccionar una página del cuadro de diálogo Crear función para especificar que los miembros de la dimensión de la Oficina este papel se le permite ver:

En el cuadro de diálogo anterior podemos especificar las oficinas que esta función se puede ver sobre la base de las siguientes opciones:

  • Seleccione todos los miembros y de forma manual anular la selección de los miembros de negar

  • Anular la selección de todos los miembros y seleccionar manualmente los miembros para que

Elegí la segunda opción ya que si se agregan nuevos miembros que inicialmente se negó, con la primera opción los nuevos miembros podrán añadir por defecto. Elija la opción apropiada según sus circunstancias. 

Esto completa la configuración para el papel BaltimoreSales. Repita los pasos anteriores para configurar otras funciones cuando sea necesario.

Prueba de la seguridad basada en el Cubo

Para poner a prueba nuestra seguridad basada en funciones vamos a utilizar el Business Intelligence Development Studio (BIDS) que viene con SQL Server. OFERTAS tiene un navegador integrado en el cubo para el tipo de proyecto SSAS. El explorador de cubos proporciona una opción para especificar la función (s) que desea utilizar para la prueba.La cuenta de usuario que utilice tendrá que ser un miembro de cada función que se desea probar. Si bien no es la mejor opción desde un punto de vista de seguridad, la cuenta utilizada para desarrollar y probar es a menudo un miembro del grupo de administradores local, que va a funcionar.

El explorador de cubos se muestra a continuación, me han puesto de manifiesto la opción de barra de herramientas que le permite especificar las credenciales que se utilizarán para examinar el cubo:

Haga clic en la opción de barra de herramientas de resaltado para especificar las credenciales que se utilizarán como se muestra a continuación:

El valor predeterminado es utilizar las credenciales del usuario actual. Se puede especificar un usuario o una o más funciones. Seleccione el papel BaltimoreSales a continuación, busque el cubo. El explorador de cubos muestra lo siguiente sobre la base de nuestra selección de papel:

Tenga en cuenta que la única oficina que se muestra es de Baltimore y de allí es un mensaje informativo que indica que está navegando por el cubo con el papel BaltimoreSales. Si cambio de las credenciales para el uso del papel ManagerRegion1, el explorador de cubos muestra:

En este caso vemos los datos de las tres oficinas. Por último, si puedo cambiar las credenciales para utilizar la posición de CEO veo los datos de ventas para todas las oficinas:

Usted puede haber notado que aunque la lista de oficinas que figuran era lo que esperábamos en cada caso, el total, debido a la venta total de todas las oficinas, no se limita sólo a las oficinas que el papel se deja ver. Este es el comportamiento predeterminado. Usted puede cambiar esto de volver al diálogo de Dimension Data, donde se seleccionaron las oficinas que el papel se puede ver. Haga clic en la ficha Opciones avanzadas y haga clic en la casilla de verificación Habilitar visual total.

La solución anterior no tendrán ningún problema para un número relativamente pequeño de usuarios, donde las reglas de autorización son bastante estáticas. Lo ideal es crear grupos de Windows, asignar usuarios a esos grupos, a continuación, agregar el grupo de Windows (s) a las funciones de cubo. En una punta el futuro voy a explorar las opciones disponibles para la aplicación de seguridad de dimensión que están utilizando las expresiones MDX y la creación de procedimientos almacenados utilizando. NET.

Los próximos pasos

  • Descargar el código de ejemplo y experimentar con él. El archivo incluye una copia de seguridad de la base de datos de SQL Server utiliza para crear el cubo, el proyecto de SSAS, y una copia de seguridad del propio cubo.Usted puede utilizar SSMS para editar las funciones y / o añadir sus propios roles.
  • Seguridad de las dimensiones de un cubo de SSAS es mucho más robusta que lo que conseguimos con una base de datos relacional de SQL Server. Esto es bueno saberlo, porque los usuarios se van a plantear a todo tipo de regímenes de autorización.

Fuente:

http://www.mssqltips.com/sqlservertip/1834/introduction-to-dimension-security-in-sql-server-analysis-services-ssas-2005/

Número de errores de formato en Reporting Services 2008 R2

¿Estamos solos en esta experiencia? SSRS 2008 R2 es una gran actualización, y resuelve muchas de las rarezas de SQL Server Reporting Services 2005. Sin embargo, sí parece obvio – si es pequeño – Solución de error.

El problema tiene que ver con el formato de números:

Cuadro de propiedades de texto del cuadro de diálogo

Se puede establecer un número o formato de la fecha con este cuadro de diálogo

Puede hacer clic en cualquier cuadro de texto para establecer sus propiedades, y el uso del Número de la pestaña superior para centrarse en formatos de fecha y número. Todo esto funciona bien.

El problema viene después de haber estado usando SSRS durante unos minutos, la hora de elegir el número de ficha hace que el cuadro de diálogo anterior se desvanecen! La única manera de conseguirlo de nuevo parece ser la de salir de SSRS y volver de nuevo.

Fuente:

http://www.wiseowl.co.uk/blog/s149/ssrs-number-format.htm

Membership en base de datos SQL

Para estrenar el nuevo tema del blog, vamos a ver de manera rapida la instalacion del marco de seguridad de .NET provisto por el Framework para integrar seguridad a las aplicaciones web o desktop, esta parte es llamada Membership y es un conjunto de tablas dentro de una base de datos para el almacenamiento de usuarios, perfiles, roles y todo lo relacionado a la seguridad en las aplicaciones.
Para empezar vamos a ir a Inicio-Todos los programas-Microsoft Visual Studio 2005 o 2008 (para ambos funciona) y entramos al folder Visual Studio Tools y ejecutamos la consola Visual Studio 2008 Command Prompt.

Aqui nos mostrara una consola de comando, ingresaremos el comando llamado “aspnet_regsql”,este comando nos mostrara el asistente para agregar el perfil de seguridad.

Haremos click en siguiente para iniciar el proceso, la siguiente pantalla nos muestra las opciones posibles para el marco de seguridad, aqui podemos configurar la opcion para agregar en una base de datos nueva o tambien podemos remover un perfil de seguridad completo de una base datos, recordemos que el perfil no solamente contiene tablas, sino que existen vistas, procedimientos almacenados, funciones y demas elementos para una base de datos.

La siguiente pantalla contiene los datos de conexion al servidor SQL para accesar a la base de datos a modificar, tenemos que definir el nombre de la base de datos, el tipo de autenticacion y el nombre de la base de datos, damos click en Siguiente despues de completar los datos.
Despues se mostrara un resumen con los datos que se ingresaron anteriormente para confirmar las acciones seleccionadas previamente. Despues de dar click en siguiente se mostrara el mensaje que el perfil se agrego exitosamente.

Con estos faciles pasos tenemos lista nuestra base de datos, ahora podemos conectar y configurar este perfil dentro de nuestras aplicaciones, eso lo veremos en proximos post.
Nos vemos!!!

Fuente

http://www.josuepanameno.info/2010/01/05/membership-en-base-de-datos-sql/

SSRS 2008 R2 Error: The report execution …. has expired or cannot be found. (rsExecutionNotFound)

Few days back one of my colleague installed SSRS 2008 R2 and uploaded few RDLs. When he rendered one of the report, he was getting an error like

The report execution x67wqt55acfewcugepmvrkn has expired or cannot be found. (rsExecutionNotFound)

The said report worked fine in the BIDS but was failing when rendered from Report Manager. I tried to trace the report execution using SQL Profiler but profiler did not receive any call which indicated that the report failed before making call to SQL SERVER. Even googling did not help me :(

After a while, I enabled the remote error property of SSRS (Using SSMS , log into to Report Services. Right click on the instance and select Property -> Advanced) to true

After setting this property, when we rendered the report from Report Manager, we got a new error message saying that date format is invalid.

By default, whenever an error occur, SSRS provides a generic error message like “An error occurred during client rendering….”. But throwing an error like “execution expired” is misleading and cause lot of confusion.

If you happen to get a similar error, try enabling the remote error property and see what is the exact error. Once you are done with the debugging, reset it to False as displaying technical error message to the end-user does not look good. This is just my opinion.

Fuente:

http://skamie.wordpress.com/2010/10/28/ssrs-2008-r2-error-the-report-execution-has-expired-or-cannot-be-found-rsexecution_not_found/

Key Performance Indicators (KPIs) using Analysis Services

In business terminology, a KPI is a quantifiable measurement for gauging business success. In Analysis Services, a KPI is a collection of calculations that are associated with a measure group in a cube that are used to evaluate business success. Typically, these calculations are a combination of Multidimensional Expressions (MDX) expressions or calculated members. KPIs also have additional metadata that provides information about how client applications should display the results of the KPI’s calculations

Common KPI Terms:

  • Goal – An MDX numeric expression or a calculation that returns the target value of the KPI.
  • Value – An MDX numeric expression that returns the actual value of the KPI.
  • Status – An MDX expression that represents the state of the KPI at a specified point in time. The status MDX expression should return a normalized value between -1 and 1. Values equal to or less than -1 will be interpreted as “bad” or “low.” A value of zero (0) is interpreted as “acceptable” or “medium.” Values equal to or greater than 1 will be interpreted as “good” or “high.”
  • Trend – An MDX expression that evaluates the value of the KPI over time. The trend can be any time-based criterion that is useful in a specific business context. The trend MDX expression enables a business user to determine whether the KPI is improving over time or degrading over time.
  • Status indicator – A visual element that provides a quick indication of the status for a KPI. 
  • Trend indicator – A visual element that provides a quick indication of the trend for a KPI. 
  • Display folder – The folder in which the KPI will appear when a user is browsing the cube.
  • Parent KPI – A reference to an existing KPI that uses the value of the child KPI as part of computation of the parent KPI. Sometimes, a single KPI will be a computation that consists of the values for other KPIs.
  • Weight – An MDX numeric expression that assigns a relative importance to a KPI. If the KPI is assigned to a parent KPI, the weight is used to proportionally adjust the results of the child KPI value when calculating the value of the parent KPI.

Creating KPIs using Business Intelligence Development Studio (BIDS)

  1. Click on the KPIs tab
  2. We shall first add a KPI named ProfitPercentage to the cube:
    • Click on the New KPI button or right-click on the KPI Organizer window and select New KPI.
    • In the KPI Designer which opens up, type in the name of the KPI asProfitPercentage.
  3. Add the measure to the Sales Fact measure group by selecting from the Associated measure group drop down.
  4. Now let’s add an expression to evaluate the value property of the KPI:
    • Type the following expression in the Value Expression box. You could also drag the measures from the Metadata tab in the Calculation tools window.

      [Measures].[Profit]/[Measures].[Product Cost]

      OR

      ([Measures].[Sales Amount]/[Measures].[Product Cost]-1

      We have built the expression above using the logic that ProfitPercentage is calculated as the difference in Sales and Cost, divided by the Cost.

      Here [Measures].[Profit] is Calculated Member using below calculation:

      CREATE MEMBER CURRENTCUBE.[MEASURES].[Profit]

      AS SUM

      (

      [Date].[Calendar Year – Qtr – Month].currentmember,

      [Measures].[Sales Amount]-[Measures].[Product Cost]

      ),

      FORMAT_STRING = “#,#”,

      VISIBLE = 1;

  5. Now, let us set the goal of the KPI to a constant. Enter 0.25 in the Goal Expression box, which means the goal expects 25% more in sales than the cost.
  6. Next we are on to the all important status. Here we shall write an expression to compare the value with the goal: 
    • Before examining the actual expression let us take a look at a pseudo-expression:
      CASE
         WHEN value/goal >= 0.9 THEN 1
         WHEN value/goal < 0.8 THEN -1
         ELSE 0
      END
      Here, a ratio of .9 would be considered good in this instance. This means that if the value makes up at least 90% of the goal then it would be considered as successful, hence the value 1 to indicate it. If value/goalequals to less than 0.8 then the status will be considered as a failure (-1). And all those values do not fall into the above ranges will be considered neutral (0).
      Now, enter the following MDX expression into the Status expression box:
      CASE
         WHEN KPIValue(“ProfitPercentage”)/KPIGoal(“ProfitPercentage”)>=.9THEN 1
         WHEN KPIValue(“ProfitPercentage”)/KPIGoal(“ProfitPercentage”)< .8THEN -1
         ELSE 0
      END
      Being the realization of the previous “pseudo-expression”, the above expression replaces value with KPIValue(“ProfitPercentage”) and goal withKPIGoal(“ProfitPercentage”). The KPIValue function returns the value of the KPI’s value property, while the KPIGoal function returns the value of the KPI’s goal property. Both functions take the name of the KPI through a character string parameter.
  7. Select an appropriate image type from the Status indicator drop down to provide for the visuals of the KPI status.
  8. The next property to be configured is the trend. Once again, let us first look at a “pseudo-expression”:
    CASE
       WHEN IsEmpty(x) THEN 0
       WHEN v – vX >= 0.25 THEN 1
       WHEN v – vX < -0.1 THEN -1
       ELSE 0
    END
    Here, x is the current time period of the previous year. For instance if the current selected time period is 20-May-2008, x will be 20-May-2007. v is the value of the KPI, which by default would return the value for the current time period. vx is the value of the KPI for the same time period of the previous year. The expression first checks if x is empty, thereby resulting in 0 (or no change in trend). Then, it checks if the current period’s value is an increase of at least 25%, thereby indicating 1 or a positive trend. If there’s a decrease of more than 10% from last year it indicates a negative trend or -1. All other results will indicate no change in the trend (or 0).
    Enter the following MDX expression in the Trend expression textbox:
    CASE
    WHEN IsEmpty(ParallelPeriod([Date].[Calendar Year – Qtr – Month].[Calendar Year], 1,[Date].[Calendar Year – Qtr – Month].CurrentMember)) THEN 0
    WHEN KPIValue(“ProfitPercentage”)-(KPIValue(“ProfitPercentage”),ParallelPeriod([Date].[Calendar Year – Qtr – Month].[Calendar Year],1,[Date].[Calendar Year – Qtr – Month].CurrentMember)) >= 0.25
    THEN 1
    WHEN KPIValue(“ProfitPercentage”) – KPIValue(“ProfitPercentage”),
    ParallelPeriod([Date].[Calendar Year – Qtr – Month].[Calendar
    Year],1,[Date].[Calendar Year – Qtr – Month].CurrentMember)) < -0.1 THEN -1
    ELSE 0
    END
    In the MDX expression above, x is replaced by ParallelPeriod([Date].[Calendar Year – Qtr – Month].[Calendar Year], 1,[Date].[Calendar Year – Qtr – Month].CurrentMember) ParallelPeriod is a function which returns a member from a prior period in the same relative position as a specified member. The variable v is replaced by KPIValue(“ProfitPercentage”) and vx is replaced by (KPIValue(“ProfitPercentage”), ParallelPeriod([Date].[Calendar Year – Qtr – Month].[Calendar Year], 1,[Date].[Calendar Year – Qtr – Month].CurrentMember)).
  9. Select an appropriate image type from the Trend indicator drop down to provide for the visual of the KPI trend. Here’s a sample of what the KPI designer should look like:

  10. The KPIs is done! Next, process the cube. You will be able to view the KPIs using the built-in KPI Browser under the KPIs tab in BIDS. You could also use Office 2007 Excel.

Fuente: http://sql-bi-dev.blogspot.com/2010/05/key-performance-indicators-kpis-using.html

Configurar Analysis Services, MOSS y Kerberos


Una tarea que nos puede hacer falta, especialmente en Proyectos de Business Intelligence y Data Warehousing con MOSS y Analysis Services, es la configuración de Autenticación y Delegación de Kerberos, de tal modo que el servidor MOSS sea capaz de obtener las credenciales de los usuarios, y realizar las peticiones a Analysis Services con las credenciales de los mismos (Double Hop), algo que podemos necesitar en situaciones diversas, como para hacer funcionar Indicadores KPI de MOSS desde KPIs definidas en Analysis Services. Así, evitaremos el error The connection either timed out or was lost y el error Autentication failed.

Descripción del Escenario del Problema

Partimos de un escenario formado por un dominio de Directorio Activo con Controladores de Dominio Windows Server 2003 R2. Sobre este dominio, tenemos una máquina corriendo MOSS 2007 SP2 (denominada VMOSS01Mob) y otra máquina corriendo Analysis Services 2005 (denominada VSQL01Mob), con una única instancia de Analysis Services corriendo como instancia por defecto.

Directorio Activo se encuentra configurado a un nivel funcional de dominio de Windows Server 2003, y a un nivel funcional del bosque de Windows 2000, como se puede apreciar a continuación.

El Nivel Funcional de Directorio Activo, puede impactar en como habilitar Kerberos en las cuentas de equipo y de usuario.

La máquina que ejecuta MOSS 2007, tiene configurado los Application Pool de MOSS para ejecutarse utilizando una cuenta de Directorio Activo (en particular, la cuenta MOSSSvc), actuando dicho usuario como una cuenta de servicio. Esta misma cuenta (MOSSSvc), ha sido utilizada para el resto de servicios de MOSS.

En este escenario, intentamos crear un Indicador KPI utilizando datos de Analysis Services 2005, sin embargo, al intentar crear el Indicador KPI, justo después de especificar el fichero de conexión de datos (ODC – Office Data Connection), se muestra el error The connection either timed out or was lost, como se muestra en la siguiente pantalla capturada.

El error The connection either timed out or was lost

También, puede ocurrir que se muestre el error Authentication failed, como se muestra a continuación, dependiendo de si utilizamos el nombre corto del servidor de Analysis Services 2005, o si por el contrario utilizamos el nombre largo FQDN (al menos es lo que he observado durante las pruebas, quizás este error se produzca también en otros escenarios).

El error Authentication failed

En ambos casos, el problema es el mismo: MOSS no es capaz de entregarle a Analysis Services las credenciales del usuario, realizando en su lugar un acceso anónimo, como se muestra en la siguiente captura de traza de Analysis Services.

El problema: Anonymous Logon en Analysis Services

Anteriormente, ya me había pegado con configuraciones similares de Kerberos, como por ejemplo al configurar la autenticación integrada y delegación de Kerberos en IIS6, configurar laautenticación de Kerberos en SQL Server (error Cannot Generate SSPI context), alconfigurar la autenticación de Kerberos en el CSS de ISA Server 2006 (ISA Server cannot connect to the Configuration Storage Server), al configurar MOSS 2007 para invocar un Web Service desde un Formulario InfoPath en NLB, y en alguna otra ocasión más.

Esto hacía que tuviese cierta idea de cómo poder solucionar este problema de conexión a Analysis Server 2005 desde MOSS 2007 (el problema del doble salto, o Double Hop), pero no, me costó un Web !!

Sin embargo, al final conseguí hacer funcionar el invento, y conseguí que un usuario desde su PC, pudiese autenticarse ante MOSS con sus credenciales, y acceder a un servidor remoto de Analysis Services a través de MOSS, utilizando las credenciales del usuario (ni acceso anónimo, ni el usuario del Application Pool). Para ello, realicé principalmente dos tareas:

  • Configurar la autenticación y delegación de Kerberos en MOSS.
  • Configurar la autenticación y delegación de Kerberos en Analysis Services.
  • Configurar el fichero de conexión a Analysis Services (ODC – Office Data Connection) utilizando el nombre completo FQDN.

A continuación, entramos en detalles.

Configuración de Autenticación y Delegación de Kerberos en MOSS

Para la configuración de Autenticación y Delegación de Kerberos en MOSS, tuve que realizar varios pasos de configuración. Al final, debo admitir que me quedó un poco la duda, de si habría funcionado también si no hubiese realizado todos los pasos, pero entre pruebas y reinicios se me fue el tiempo sin conseguir determinarlo, por lo que a continuación se detallan todas las configuraciones que tuve que realizar para conseguir hacer funcionar la Autenticación y Delegación de Kerberos en MOSS.

Paso 1) Configurar SPN (Service Principle Names) de Cuentas de Equipo

Esta configuración no suele ser habitual, ya que se utiliza sólo en aquellos casos en que el servicio que se desea configurar (o el Application Pool) no utiliza una cuenta de usuario, por ejemplo, al utilizar la cuenta Network Service.

En nuestro caso, no aplica, ya que utilizamos en todos los casos una cuenta de usuario. Si fuese al contrario, deberían ejecutarse comandos setspn similares a los que se describen en el paso 2, con la diferencia de que en vez de especificar una cuenta de usuario, se debería de especificar la cuenta de equipo del servidor MOSS.

Paso 2) Configurar SPN (Service Principle Names) de Cuenta de Servicio para HTTP

Antes de ejecutar esta configuración, es necesario determinar los nombres que se desean utilizar para acceder a MOSS (es decir, las URLs) y las cuentas de servicio utilizadas (incluyendo las cuentas utilizadas en los Application Pool de IIS).

En nuestro escenario, utilizamos el nombre NetBIOS del servidor (VMOSS01Mob) para acceder a MOSS (un caso extraño, quiero decir, en producción es típico utilizar nombres DNS y entornos NLB, pero nuestro caso de ejemplo se basa en un pequeño entorno de laboratorio). Adicionalmente, utilizamos una única cuenta de usuario (la cuenta MOSSSvc) para ejecutar todos los servicios de MOSS y también para los Application Pool (tampoco recomendable para entornos productivos, pero en entornos de laboratorio, simplifica bastante la configuración y mantenimiento).

Bajo estas premisas, tan sólo es necesario ejecutar un par de comandos setspn.exe, uno para el nombre largo (FQDN) y otro para el nombre corto, como se muestra en la siguiente pantalla capturada.

Configurar los SPN (Service Principal Name) de HTTP para MOSS, con el comando setspn

Paso 3) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Equipo

La ejecución de este paso, consiste en habilitar la Delegación (Trust computer for Delegation) en las cuentas de equipo de los Frontales de MOSS. Al menos, en mi caso lo he realizado sólo sobre las cuentas de los Frontales de MOSS, en vez de sobre todos los servidores MOSS (ej: Index Server, Excel Services, etc.), y en las pruebas que he realizado el resultado ha sido satisfactorio (igual en un tiempo, resulta que me hacía falta configurarlo sobre el resto de cuentas de equipo, no lo descarto ;-).

Para realizar esta configuración, desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de equipo que se desea configurar. Seguidamente, seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this computer for delegation to any service (Kerberos Orly), como se aprecia en la siguiente pantalla capturada.

Configurar la opción Trust this computer for delegation.

Téngase en cuenta, que la configuración de esta opción, varía en función del nivel funcional de Directorio Activo. Podría ocurrir que no apareciese la pestaña Delegation, en cuyo caso, se debería activar la opción Trust computer for delegation, que en este caso, se mostrará en la pestaña General. Esto puede generar algo de confusión, pero francamente, no tiene mayor misterio.

Paso 4) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Servicio

Este paso es similar al paso anterior, con la diferencia de que debe aplicarse sobre las cuentas de usuario utilizadas en los servicios y Application Pool de MOSS, en lugar de sobre cuentas de equipo.

En consecuencia, para realizar esta configuración, desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de usuario que se desea configurar, seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this user for delegation to any service (Kerberos Orly), como se aprecia en la siguiente pantalla capturada.

Configurar la opción Trust this user for delegation.

Si no se muestra la pestaña Delegation sobre la cuenta de usuario, podría ser porque no se configuró previamente el SPN. Otro motivo, el nivel funcional de Directorio Activo (comprobar si aparece la opción Account is trusted for delegation en la pestaña Account).

Paso 5) Modificar la MetaBase de IIS

Esta configuración se realiza ejecutando en cada Frontal de MOSS, un comando para cada Sitio Web de IIS que se desee configurar. En este caso de ejemplo, tenemos un único Frontal de MOSS (VMOSS01Mob) y dos Sitios Web de IIS. Es necesario identificar previamente el ID de cada Sitio Web, algo que podemos obtener desde la herramienta administrativa IIS Manager, como se muestra en la siguiente pantalla capturada.

Como averiguar el Site ID de los Sitios Web de IIS

Los comandos a utilizar, se basan en el script adsutil.vbs, ubicado por defecto en c:\Inetpub\AdminScripts. A continuación se muestra una pantalla capturada con los comandos ejecutados (recordar realizarlo en cada Frontal MOSS).

Configurar Metabase IIS

De forma previa, para quién lo desee, es posible realizar un Backup de la Metabase de IIS6

Paso 6) Habilitar Autenticación Kerberos en las Aplicaciones Web de MOSS

Esta configuración debe realizarse para la Aplicación Web que deseamos configurar. En mi caso, lo configuré también en la Aplicación Web correspondiente a la Administración de los Servicios Compartidos.

Los pasos a seguir son los siguientes. En la Consola de Administración Central de MOSS, seleccionar la pestaña Application Management, y seguidamente seleccionar la opciónAuthentication Providers de la sección Application Security. En la pantalla Authentication Providers, seleccionar la aplicación que se desea configurar en el desplegable Web Application. Seguidamente, click sobre la zona que se desea configurar (habitualmente, se tratará de la zona Default, que será la única zona existente).

Configurar la Autenticación de la Aplicación MOSS

En la pantalla Edit Authentication, en el apartado IIS Authentication Settings, seleccionar la opción Negotiate (Kerberos), como se muestra en la siguiente pantalla captura.

Configurar la Autenticación de la Aplicación MOSS

Guardar los cambios, y repetir el proceso para el resto de Aplicaciones Web de MOSS que se deseen configurar.

Paso 7) Habilitar Kerberos en los Servicios Compartidos (SSP) de MOSS

Consiste en ejecutar un comando STSADM desde uno de los frontales de MOSS, en particular: STSADM.exe -o SetSharedWebServiceAuthn -negotiate

A continuación se muestra una pantalla capturada.

Habilitar Kerberos en los Servicios Compartidos (SSP)

Paso 8) Habilitar la Delegación en Excel Services

Similar al paso anterior, consiste en ejecutar un par de comandos STSADM desde uno de los frontales de MOSS. Téngase en cuenta, que en el primero de los comandos a ejecutar es necesario especificar el nombre de los Servicios Compartidos sobre los que se desea habilitar Kerberos.

El primer comando a ejecutar es: stsadm.exe -o set-ecssecurity -ssp SSP_NAME -accessmodel delegation

El segundo comando a ejecutar es: stsadm.exe -o execadmsvcjobs

A continuación se muestra una pantalla capturada a modo de ejemplo.

Habilitar la Delegación en Excel Services

Paso 9) Habilitar la Delegación en los Servidores de MOSS (Component Services)

Esta configuración debe realizarse en cada uno de los Frontales de MOSS. Es decir, si tenemos una Granja MOSS con dos Frontales formando un Cluster NLB, será necesario realizar esta configuración en cada uno de los dos Frontales.

La tarea a realizar es muy sencilla. Abrir la herramienta administrativa Component Services, y seleccionar la opción Properties de My Computer, como se muestra en la siguiente pantalla capturada.

Propiedades de My Computer en Component Services

En la pestaña Default Properties, seleccionar el valor Delegate para la opción Default Impersonation Level, como se muestra en la siguiente pantalla capturada.

Configurar Default Impersonation Level en Component Services

Aplicamos los cambios, y hemos terminado (excepto que tengamos que repetirlo en algún otro Frontal de MOSS).

Paso 10) Reiniciar los Frontales de MOSS

Lo de siempre. Si tenemos varios frontales, los reiniciamos de forma ordenada. Sin mucho misterio.

Configurar la autenticación y delegación de Kerberos en Analysis Services

Paso 1) Configurar SPN (Service Principle Names) de Cuentas de Equipo

Esta configuración no suele ser habitual, ya que se utiliza sólo en aquellos casos en que el servicio de Analysis Services no utiliza una cuenta de usuario, por ejemplo, al utilizar la cuenta Network Service.

En nuestro caso, no aplica, ya que utilizamos una cuenta de usuario, en particular la cuenta de dominio SQLSvc. Si fuese al contrario, deberían ejecutarse comandos setspn similares a los que se describen en el paso 2, con la diferencia de que en vez de especificar una cuenta de usuario, se debería de especificar la cuenta de equipo que ejecuta Analysis Services.

Paso 2) Configurar SPN (Service Principle Names) de Cuenta de Servicio para Analysis Services

Tan sólo es necesario ejecutar un par de comandos setspn.exe, uno para el nombre largo (FQDN) y otro para el nombre corto, como se muestra en la siguiente pantalla capturada (damos por hecho, que estos dos nombres, son los únicos que se utilizarán para acceder a Analysis Services).

Configurar el SPN (Service Principal Name) MSOLAPSvc.3 para Analysis Services con setspn

Paso 3) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Equipo

Desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de equipo que se desea configurar (en nuestro caso, VSQL01Mob). Seguidamente, seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this computer for delegation to any service (Kerberos Orly). Este paso es similar al que se comentó anteriormente para el caso de las cuentas de equipo de MOSS.

Cómo ya se dijo, debe tenerse en cuenta, que la configuración de esta opción, varía en función del nivel funcional de Directorio Activo. Podría ocurrir que no apareciese la pestaña Delegation, en cuyo caso, se debería activar la opción Trust computer for delegation, que en este caso, se mostrará en la pestaña General. Esto puede generar algo de confusión, pero francamente, no tiene mayor misterio.

Paso 4) Habilitar la Delegación (Trust for Delegation) en las Cuentas de Servicio

Este paso es similar al paso anterior, y sobre todo, similar al paso que se comentó anteriormente para el caso de las cuentas de usuario de MOSS, aunque ahora se limita a la cuenta de usuario utilizada para iniciar el servicio de Analysis Services.

En consecuencia, para realizar esta configuración, desde la herramienta administrativa ADUC (Active Directory Users and Computers), mostrar las propiedades de la cuenta de usuario que se desea configurar (en nuestro caso, la cuenta SQLSvc), seleccionar la pestaña Delegation, y sobre la misma, seleccionar la opción Trust this user for delegation to any service (Kerberos Orly).

Si no se muestra la pestaña Delegation sobre la cuenta de usuario, podría ser porque no se configuró previamente el SPN. Otro motivo, el nivel funcional de Directorio Activo (comprobar si aparece la opción Account is trusted for delegation en la pestaña Account).

Paso 5) Reiniciar el servidor de Analysis Services

Sin mayor misterio.

Configurar el fichero de conexión (ODC – Office Data Connection) a Analysis Services

Partimos de un equipo de escritorio (en nuestro caso, un Windows XP) con Office 2007 instalado. Desde el Explorador de Windows, nos ubicamos en My Documents, y hacemos doble-click sobre la opción Connect to New Data Source.odc, como se muestra en la siguiente pantalla capturada.

Crear nuevo fichero de conexión ODC (Office Data Connection)

Esto producirá que se inicie Microsoft Excel. Es probable que se muestre un mensaje de seguridad, como se muestra a continuación. En este caso, click Enable para continuar.

Mensaje de Seguridad de Excel (click Enable)

Se inicia el asistente para la creación de una nueva conexión de datos. Seleccionamos Microsoft SQL Server Analysis Services, y click en Next para continuar.

Seleccionar Microsoft SQL Server Analysis Services en el Data Connection Wizard

Especificamos el nombre de la instancia a la que nos deseamos conectar. En nuestro caso, se trata de una instancia por defecto. Es recomendable utilizar el nombre completo de la máquina (FQDN). Seleccionamos la autenticación de Windows (Use Windows Authentication). Click Next para continuar.

Especificar el nombre del servidor de Analysis Services en el diálogo Connect to Database Server del Data Connection Wizard

Seleccionamos el Cubo al que nos deseamos conectar. Click Next para continuar.

Seleccionar el Cubo de Analysis Services al que nos deseamos conectar

Especificamos el nombre del fichero ODC que deseamos crear, la descripción y el nombre amigable que deseemos. Click Finish para continuar.

Especificar el nombre del fichero de conexión ODC y otras propiedades.

Llegados a este punto, se habrá creado el fichero ODC (Office Data Connection) correspondiente a nuestra conexión a Analysis Services.

El fichero ODC (Office Data Connection) ya está creado

Ahora sólo queda subir el fichero ODC a la correspondiente librería de MOSS, bien manualmente (haciendo un upload, como se hace con cualquier otro tipo de documentos), o bien desde Excel. En este último caso, seleccionaremos la opción Connections de la pestaña Data.

Botón Connections de Excel 2007

En el diálogo Workbook Connections, seleccionamos la conexión deseada, y click Properties.

Diálogo Workbook connections de Excel 2007

En el diálogo Connection Properties, seleccionaremos la pestaña Definition, y click en el botónExport Connection File.

Propiedades de la conexión en Excel

En el diálogo File Save, escribimos en la caja File Name la URL sobre la que deseamos almacenar el fichero de conexión ODC, y click Save.

Exportar el fichero de conexión desde Excel 2007

Si se muestra el diálogo Web File Properties, ajustamos el valor de los campos mostrados, y click OK para continuar.

Espeficar los datos que MOSS nos solicite al guardar el fichero

Y ya está. Por fin, hemos creado nuestro fichero de conexión ODC a Analysis Services, y lo hemos subido a MOSS, para poder empezar a utilizarlo.

Comprobar el funcionamiento de la nueva configuración realizada

Finalmente, no hay nada como comprobar que todo funciona correctamente. En nuestro caso, es suficiente con intentar crear en MOSS un nuevo Indicador KPI desde Analysis Services, y al especificar el fichero de conexión apropiado (ODC – Office Data Connection file), comprobar que se consigue acceder a Analysis Services y se muestran las KPIs disponibles. A continuación, se muestra una pantalla capturada.

Comprobar que funciona correctamente la conexión a Analysis Servides desde MOSS 2007. Kerberos funciona.

Uff. Qué alivio.

Conclusiones finales y enlaces de interés

Tras ejecutar la configuración descrita en este artículo, se pueden sacar algunas conclusiones.

Por ejemplo, para conseguir poner en funcionamiento la Autenticación y Delegación de Kerberos ha sido necesario ejecutar algunos comandos y configuraciones propias de MOSS, a través de STSADM y de la Consola de Administración Central. Estas son configuraciones específicas de MOSS 2007.

Del mismo modo, también ha sido necesario realizar configuraciones comunes, que suelen realizarse al configurar la Autenticación y Delegación de Kerberos en otros entornos distintos a MOSS. Véase el caso de la configuración de los SPN (Service Principal Name), y de habilitar la Delegación de Kerberos (Trust for Delegation) en cuentas de equipo y de servicio.

Una configuración que me ha llamado la atención, es la correspondiente al Paso 9, Habilitar la Delegación en los Servidores de MOSS (Component Services). El motivo, es que nunca anteriormente había tenido que tocar esta propiedad, por lo que no descarto que en alguna otra configuración de Kerberos (ajena a MOSS) que pueda encontrarme en un futuro, me resulte necesario.

Por último, aprovecho para colgar algunos enlaces de interés, de los cuales quiero destacar los correspondientes al sitio A Marvellous Point, de Martin Kearn (buenísimo).

Martin Kearn, ha dejado de dar continuidad al sitio A Marvellous Point, y ahora escribe en el Blog de la MDSN UK SharePoint Team, para quien quiera darle un vistazo.

Actualizado 26/02/2010. Aprovecho para incluir un par de enlaces de interés:

Poco más. Como siempre, espero que os resulte de utilidad.

Fuente: http://www.guillesql.es/Articulos/Configurar_Analysis_Services_MOSS_Kerberos.aspx

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.