Ir para o conteúdo

Como resolvo problemas de permissões com comandos SQL e procedimentos armazenados no Amazon RDS para SQL Server?

7 minuto de leitura
0

Quero resolver problemas de permissões para executar comandos SQL, executar procedimentos armazenados e gerenciar o Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server.

Breve descrição

É possível receber erros de permissão ao realizar as seguintes ações:

  • Executar procedimentos do sistema, como sp_updatestats, sp_configure e xp_cmdshell para configurar e manter um banco de dados.
  • Executar procedimentos armazenados personalizados.
  • Recuperar logs de auditoria.
  • Implantar o SQL Server Integration Services (SSIS).
  • Usar o SQL Server Management Studio (SSMS).

Para manter a estabilidade, a segurança e a capacidade de gerenciamento do serviço, o Amazon RDS ou o SQL Server não oferece suporte a perfis em nível de servidor, como sysadmin. Para obter mais informações, consulte Segurança do Microsoft SQL Server.

Se seu workload exigir recursos para os quais o RDS para SQL Server padrão não oferece suporte, use o RDS Custom para SQL Server. Para ter controle total sobre a instância do banco de dados e o sistema operacional (SO) do SQL Server, use o SQL Server no Amazon Elastic Compute Cloud (Amazon EC2). Para comparar as diferenças entre o Amazon EC2 e o Amazon RDS para seu banco de dados do SQL Server, consulte Escolher entre o Amazon EC2 e o Amazon RDS.

Resolução

Você recebe um erro com sp_configure e RECONFIGURE

Para gerenciar configurações em nível de servidor, como sp_configure and RECONFIGURE, use grupos de parâmetros de banco de dados.

Observação: as alterações nos parâmetros estáticos exigem que você reinicie sua instância de banco de dados para que o parâmetro entre em vigor. Mudanças nos parâmetros dinâmicos, como o grau máximo de paralelismo (max degree of parallelism, MAXDOP), entram em vigor imediatamente sem reiniciar. Para obter mais exemplos de parâmetros de desempenho, consulte Best practices for configuring performance parameters for Amazon RDS for SQL Server (Práticas recomendadas para configurar parâmetros de desempenho no Amazon RDS para SQL Server).

Você recebe um erro com sp_updatestats

Para resolver problemas com sp_updatestats, use uma das seguintes soluções alternativas:

  • Execute o comando a seguir para criar um procedimento wrapper que seja executado com a permissão dbo:

    CREATE PROCEDURE myRDS_updatestats WITH EXECUTE AS 'dbo'  
    AS  
    
    EXEC sp_updatestats  
    
    GO  
    -- Grant execute permission to the required user  
    GRANT EXECUTE ON myRDS_updatestats TO <username>  
    GO
  • Para atualizar as estatísticas de todas as tabelas em um banco de dados, execute o comando a seguir para usar UPDATE STATISTICS com SQL dinâmico:

    USE [Database_Name]  
    GO;  
    DECLARE @sql nvarchar(MAX);  
    SELECT @sql = (SELECT 'UPDATE STATISTICS ' +  
                  QUOTENAME(s.name) + '.' + QUOTENAME(o.name) +  
                  ' WITH FULLSCAN; ' AS [text()]  
           FROM sys.objects o       JOIN sys.schemas s ON o.schema_id = s.schema_id       WHERE o.type = 'U'  
           FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)');  
    PRINT @sql  
    EXEC (@sql)  
    GO
  • Execute o comando a seguir para usar sp_MSforeachtable:

    EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'

Se um procedimento wrapper falhar, verifique quem é o proprietário do banco de dados. Depois que os eventos de failover ocorrerem, você substituir hosts ou escalar uma classe de instância de banco de dados, a propriedade do banco de dados pode mudar de rdsa para NT AUTHORITY\SYSTEM.

Para resolver esse problema, execute o comando a seguir para alterar a propriedade do banco de dados de volta para rdsa:

EXEC msdb.dbo.rds_changedbowner_to_rdsa @dbname = 'YourDatabaseName';

Para obter mais informações sobre tarefas de manutenção, consulte Como crio trabalhos de manutenção para reconstruir índices na minha instância do Amazon RDS para SQL Server?

Não é possível ativar ou executar xp_cmdshell

Como o Amazon RDS é um serviço gerenciado, você não tem acesso ao sistema operacional e não pode executar o procedimento xp_cmdshell.

Observação: o valor padrão do parâmetro show advanced options é false, mas seu valor de execução está definido como 1. Portanto, você não precisa executar comandos SQL separados para usar o parâmetro.

Se você precisar executar xp_cmdshell em seu workload, use o RDS Custom para SQL Server ou o Microsoft SQL Server no Amazon EC2.

Erro com procedimentos armazenados do OLE Automation

Para proteger a estabilidade e a segurança da instância, os seguintes procedimentos armazenados não estão disponíveis no Amazon RDS para SQL Server:

  • sp_OACreate
  • sp_OADestroy
  • sp_OAGetErrorInfo
  • sp_OAGetProperty
  • sp_OAMethod
  • sp_OASetProperty
  • sp_OAStop

Em vez disso, use o RDS Custom para SQL Server, que lhe permite personalizar o sistema operacional e o banco de dados no ambiente do RDS.

Não é possível acessar os logs de auditoria do SQL Server

No Amazon RDS para SQL Server, a função padrão do SQL Server fn_get_audit_file não está acessível diretamente. Em vez disso, você deve usar a função msdb.dbo.rds_fn_get_audit_file do RDS.

Exemplo de comando que usa msdb.dbo.rds_fn_get_audit_file:

SELECT *  
FROM msdb.dbo.rds_fn_get_audit_file(  
    'D:\rdsdbdata\SQLAudit\*.sqlaudit',  
    DEFAULT,  
    DEFAULT  
);

Para obter mais informações, consulte Suporte para auditoria do SQL Server.

Para visualizar os registros de auditoria na pasta de retenção, execute a seguinte consulta:

SELECT *  
FROM msdb.dbo.rds_fn_get_audit_file(  
    'D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit',  
    DEFAULT,  
    DEFAULT  
);

Você teve sua permissão para sp_addmessage negada

O procedimento armazenado do sistema sp_addmessage exige que você tenha acesso aos perfis de servidor sysadmin ou serveradmin.

Como o Amazon RDS não permite que você use sysadmin ou serveradmin, realize as seguintes ações:

  • Use uma declaração THROW para gerar exceções personalizadas sem a necessidade de predefinir a mensagem em sys.messages:

    THROW 50001, 'Custom error message for the application', 1;
  • Use uma declaração RAISERROR para gerar mensagens de erro personalizadas. Quando você não especifica uma msg_id, RAISERROR gera um erro com o número de erro 50000:

    RAISERROR ('Custom error message', 16, 1);

Se sua aplicação exigir o perfil sysadmin para executar sysadmin ou serveradmin, use o Amazon RDS Custom para SQL Server. Ou hospede o SQL Server em uma instância do EC2. Para obter mais informações, consulte Privilégios da conta de usuário mestre.

Você teve falhas na implantação do pacote SSIS

Certifique-se de que o perfil do AWS Identity and Access Management (AWS IAM) associado à sua instância de banco de dados tenha as permissões necessárias para acessar o bucket do Amazon Simple Storage Service (Amazon S3). Para ver requisitos de permissões, consulte Integrar uma instância de banco de dados do Amazon RDS para SQL Server ao Amazon S3.

A instância de banco de dados e o bucket do S3 devem estar na mesma região da AWS. Se eles estiverem em regiões diferentes, crie um novo bucket do S3 na mesma região da sua instância de banco de dados.

Nas tarefas de fluxo de dados, você deve definir BLOBTempStoragePath e BufferTempStoragePath como um caminho de arquivo que começa com D:\S3\.

Observação: certifique-se de que todos os parâmetros, variáveis e expressões que você usa para conexões de arquivos apontem para a pasta D:\S3.

Para obter mais informações, consulte Suporte para SQL Server Integration Services no Amazon RDS para SQL Server e Integrar uma instância de banco de dados do Amazon RDS para SQL Server ao Amazon S3.

Use o resource governor

Para definir cotas e prioridades de recursos específicas para diferentes usuários e aplicações, use resource governor para controlar os recursos da instância de banco de dados. É possível definir cotas específicas para como os workloads usam recursos de CPU, memória e E/S físicos.

Informações relacionadas

Amazon RDS para Microsoft SQL Server

Amazon EC2 para SQL Server

Amazon RDS Custom

AWS OFICIALAtualizada há 8 meses