/ / Armazenado Proc acessar vários bancos de dados no mesmo servidor FALHA - stored-procedures, sql-server-2008-r2, banco de dados cruzado

Armazenado Proc acessar vários bancos de dados no mesmo servidor FALHA - stored-procedures, sql-server-2008-r2, cross-database

Eu estou tentando executar o procedimento armazenado de umlogin de permissão limitado que recebeu permissões de execução para o dito procedimento armazenado. O procedimento armazenado acessa dois bancos de dados que existem no mesmo servidor. Quando executo o procedimento armazenado, recebo um erro que afirma:

O servidor principal "LimitedUser" não consegue acessar o banco de dados "Database2" no contexto de segurança atual.

Algum fundo: Eu recentemente fui encarregado com o objetivo de migrar nossos dois servidores de banco de dados diferentes em um único banco de dados. Eu fiz backup e exportei os bancos de dados necessários e os restaurei no novo servidor. Os bancos de dados mais antigos são o MS SQL Server 2000 (para o Banco de Dados 2) e o MS SQL Server 2005 (para o Banco de Dados 1 - onde está localizado o procedimento armazenado acima).

Eu encontrei algumas pistas que parecem sugerir queporque eu importei os bancos de dados, os proprietários eram diferentes e isso causaria um problema. Então eu corri "exec sp_changedbowner" sa "" nos 2 bancos de dados para garantir que eles tivessem o mesmo dono. Eu ainda tenho o mesmo erro ao executar o proc armazenado do LimitedUser. Um monte de outros exemplos em vários sites de fórum lidam com bancos de dados que estão em servidores diferentes ... e tendo que utilizar comandos de consulta abertos. Eu não acredito que isso seja necessário.

Quando eu o executo como um usuário que tem mais permissões de administrador, o procedimento armazenado é executado muito bem. Então, minha pergunta é: quais permissões devo definir para permitir essa ação do LimitedUser?

Obrigado!

Respostas:

0 para resposta № 1

LimitedUser precisa de permissões no Database2 para fazerqualquer que seja o procedimento armazenado nesse banco de dados, o encadeamento de propriedade só funcionará no mesmo banco de dados (a menos que você ative a opção Cross Chain Ownership Encadeamento, que não recomendo, pois divide o contêiner de banco de dados como um limite de segurança).

Então, por exemplo, você tem db1 e db2, existe um proc armazenado em db1 que executa select * from db2.dbo.table1

Para isso, você precisa do LimitedUser para:

  • executar permissões no banco de dados db1 para o procedimento
  • selecionar permissões na table1 no db2