Passer au contenu

Comment résoudre les problèmes d'autorisations liés aux commandes SQL et aux procédures stockées sur Amazon RDS pour SQL Server ?

Lecture de 7 minute(s)
0

Je souhaite résoudre les problèmes d'autorisations liés à l'exécution de commandes SQL, à l'exécution de procédures stockées et à la gestion d'Amazon Relational Database Service (Amazon RDS) pour Microsoft SQL Server.

Brève description

Vous pouvez recevoir des erreurs d'autorisation lorsque vous effectuez les actions suivantes :

  • Exécutez des procédures système, telles que sp_updatestats, sp_configure et xp_cmdshell pour configurer et gérer une base de données.
  • Exécutez des procédures stockées personnalisées.
  • Récupérez les journaux d'audit.
  • Déployez SQL Server Integration Services (SSIS).
  • Utilisez SQL Server Management Studio (SSMS).

Pour garantir la stabilité, la sécurité et la facilité de gestion des services, Amazon RDS ou SQL Server ne prend pas en charge les rôles au niveau du serveur, tels que sysadmin. Pour plus d'informations, consultez la section Sécurité de Microsoft SQL Server.

Si votre charge de travail requiert des fonctionnalités que la version standard de RDS pour SQL Server ne prend pas en charge, utilisez RDS Custom pour SQL Server. Pour un contrôle total de l'instance de base de données (DB) et du système d'exploitation (OS) SQL Server, utilisez SQL Server sur Amazon Elastic Compute Cloud (Amazon EC2). Pour comparer les différences entre Amazon EC2 et Amazon RDS pour votre base de données SQL Server, consultez la section Choisir entre Amazon EC2 et Amazon RDS.

Résolution

Vous recevez un message d'erreur avec sp_configure et RECONFIGURE

Pour gérer les configurations au niveau du serveur, telles que sp_configure et RECONFIGURE, utilisez Groupes de paramètres de base de données.

Remarque : Les modifications apportées aux paramètres statiques nécessitent que vous redémarriez votre instance de base de données pour que le paramètre soit pris en compte. Les modifications des paramètres dynamiques, tels que le degré de parallélisme maximal (MAXDOP), prennent effet immédiatement sans redémarrage. Pour plus d'exemples de paramètres de performance, consultez la section Bonnes pratiques pour configurer les paramètres de performance pour Amazon RDS pour SQL Server.

Vous recevez un message d'erreur avec sp_updatestats

Pour résoudre les problèmes liés à sp_updatestats, appliquez l'une des solutions suivantes :

  • Exécutez la commande suivante pour créer une procédure d’encapsulation qui s'exécute avec l'autorisation 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
  • Pour mettre à jour les statistiques de toutes les tables d'une base de données, exécutez la commande suivante pour utiliser UPDATE STATISTICS avec Dynamic SQL :

    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
  • Exécutez la commande suivante pour utiliser sp_MSforeachtable :

    EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'

Si une procédure d'encapsulation échoue, vérifiez à qui appartient la base de données. Une fois que des événements de basculement sont survenus, que vous remplacez des hôtes ou que vous mettez à l’échelle une classe d'instance de base de données, le propriétaire de la base de données peut passer de rdsa à NT AUTHORITY\SYSTEM.

Pour résoudre ce problème, exécutez la commande suivante pour redéfinir la propriété de la base de données en rdsa :

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

Pour plus d'informations sur les tâches de maintenance, consultez la section Comment créer des tâches de maintenance SQL Server dans Amazon RDS ?

Vous ne pouvez pas activer ou exécuter xp_cmdshell

Amazon RDS étant un service géré, vous n'avez pas accès au système d'exploitation et ne pouvez pas exécuter la procédure xp_cmdshell.

Remarque : La valeur par défaut du paramètre show advanced options est faux, mais sa valeur d'exécution est définie sur 1. Il n'est donc pas nécessaire d'exécuter des commandes SQL distinctes pour utiliser le paramètre.

Si vous devez exécuter xp_cmdshell pour votre charge de travail, utilisez RDS Custom pour SQL Server ou Microsoft SQL Server sur Amazon EC2.

Erreur liée aux procédures stockées OLE Automation

Pour protéger la stabilité et la sécurité des instances, les procédures stockées suivantes ne sont pas disponibles dans Amazon RDS pour SQL Server :

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

Utilisez plutôt RDS Custom pour SQL Server qui vous permet de personnaliser le système d'exploitation et la base de données dans l'environnement RDS.

Vous ne pouvez pas accéder aux journaux d'audit de SQL Server

Dans Amazon RDS pour SQL Server, la fonction SQL Server standard fn_get_audit_file n'est pas directement accessible. Vous devez plutôt utiliser la fonction RDS msdb.dbo.rds_fn_get_audit_file.

Exemple de commande utilisant msdb.dbo.rds_fn_get_audit_file :

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

Pour plus d'informations, consultez la section Support pour SQL Server Audit.

Pour afficher les enregistrements d'audit dans le dossier de rétention, exécutez la requête suivante :

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

L'autorisation pour sp_addmessage vous a été refusée

La procédure stockée du système sp_addmessage requiert que vous ayez accès aux rôles de serveur sysadmin ou serveradmin.

Amazon RDS ne vous permettant pas d'utiliser sysadmin ou serveradmin, effectuez plutôt les actions suivantes :

  • Utilisez une instruction THROW pour déclencher des exceptions personnalisées sans qu'il soit nécessaire de prédéfinir le message dans sys.messages :

    THROW 50001, 'Custom error message for the application', 1;
  • Utilisez une instruction RAISERROR pour générer des messages d'erreur personnalisés. Lorsque vous ne spécifiez pas de msg_id, RAISERROR génère une erreur portant le numéro d'erreur 50000 :

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

Si votre application nécessite le rôle sysadmin pour exécuter sysadmin ou serveradmin, utilisez Amazon RDS Custom pour SQL Server. Vous pouvez également héberger SQL Server sur une instance EC2. Pour en savoir plus, consultez la section Privilèges du compte utilisateur principal.

Vous avez rencontré des erreurs de déploiement du package SSIS

Assurez-vous que le rôle Gestion des identités et des accès AWS (AWS IAM) associé à votre instance de base de données dispose des autorisations requises pour accéder au compartiment Amazon Simple Storage Service (Amazon S3). Pour les exigences en matière d'autorisations, consultez la section Intégration d'une instance de base de données Amazon RDS pour SQL Server à Amazon S3.

L’instance de base de données et le compartiment S3 doivent se trouver dans la même région AWS que la région AWS. S’ils se trouvent dans des régions différentes, créez un nouveau compartiment S3 dans la même région que votre instance de base de données.

Pour les tâches de flux de données, vous devez définir BLOBTempStoragePath et BufferTempStoragePath sur un chemin de fichier commençant par D:\S3\.

Remarque : Assurez-vous que tous les paramètres, variables et expressions que vous utilisez pour les connexions aux fichiers pointent vers le dossier D:\S3.

Pour plus d'informations, consultez les sections Support pour SQL Server Integration Services (SSIS) dans Amazon RDS pour SQL Server et Intégration d'une instance de base de données Amazon RDS pour SQL Server à Amazon S3.

Utiliser le gouverneur de ressources

Pour définir des quotas de ressources et des priorités spécifiques pour différents utilisateurs et applications, utilisez le gouverneur de ressources pour contrôler les ressources de l’instance de base de données. Vous pouvez définir des quotas spécifiques sur la manière dont les charges de travail utilisent les ressources du processeur, de la mémoire et des E/S physiques.

Informations connexes

Amazon RDS for Microsoft SQL Server

Amazon EC2 pour SQL Server

Amazon RDS Custom

AWS OFFICIELA mis à jour il y a 8 mois