Direkt zum Inhalt

Wie löse ich Berechtigungsprobleme mit SQL-Befehlen und gespeicherten Prozeduren auf Amazon RDS für SQL Server?

Lesedauer: 6 Minute
0

Ich möchte Berechtigungsprobleme lösen, um SQL-Befehle auszuführen, gespeicherte Prozeduren auszuführen und Amazon Relational Database Service (Amazon RDS) für Microsoft SQL Server zu verwalten.

Kurzbeschreibung

Möglicherweise erhältst du Berechtigungsfehler, wenn du die folgenden Aktionen ausführst:

  • Führe Systemprozeduren wie sp_updatestats, sp_configure und xp_cmdshell aus, um eine Datenbank zu konfigurieren und zu pflegen.
  • Führe benutzerdefinierte gespeicherte Prozeduren aus.
  • Rufe Prüfungsprotokolle ab.
  • Stelle SQL Server Integration Services (SSIS) bereit.
  • Verwende SQL Server Management Studio (SSMS).

Zur Aufrechterhaltung der Servicestabilität, Sicherheit und Verwaltbarkeit unterstützen Amazon RDS oder SQL Server keine Rollen auf Serverebene, wie z. B. sysadmin. Weitere Informationen findest du unter Microsoft-SQL-Server-Sicherheit.

Wenn der Workload Funktionen erfordert, die von RDS für SQL Server standardmäßig nicht unterstützt werden, verwende RDS Custom für SQL Server. Verwende SQL Server auf Amazon Elastic Compute Cloud (Amazon EC2), um die vollständige Kontrolle über die SQL-Server-Datenbank (DB)-Instance und das Betriebssystem zu erhalten. Informationen zum Vergleich der Unterschiede zwischen Amazon EC2 und Amazon RDS für die SQL-Server-Datenbank findest du unter Zwischen Amazon EC2 and Amazon RDS wählen.

Lösung

Du erhältst eine Fehlermeldung mit sp_configure und RECONFIGURE

Verwende DB-Parametergruppen, um Konfigurationen auf Serverebene wie sp_configure und RECONFIGURE zu verwalten.

Hinweis: Änderungen an statischen Parametern erfordern einen Neustart der DB-Instance, damit der Parameter wirksam wird. Änderungen an dynamischen Parametern, wie z. B. der maximale Parallelitätsgrad (MAXDOP), werden sofort und ohne Neustart wirksam. Weitere Beispiele für Leistungsparameter findest du unter Bewährte Methoden für die Konfiguration von Leistungsparametern für Amazon RDS für SQL Server.

Du erhältst eine Fehlermeldung mit sp_updatestats

Verwende eine der folgenden Problemumgehungen, um Probleme mit sp_updatestats zu beheben:

  • Führe den folgenden Befehl aus, um eine Wrapper-Prozedur zu erstellen, die mit derdbo-Berechtigung ausgeführt wird:

    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
  • Um Statistiken für alle Tabellen in einer Datenbank zu aktualisieren, führe den folgenden Befehl aus, um UPDATE STATISTICS mit Dynamic SQL zu verwenden:

    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
  • Führe den folgenden Befehl aus, um sp_MSforeachtable zu verwenden:

    EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'

Wenn eine Wrapper-Prozedur fehlschlägt, überprüfe, wem die Datenbank gehört. Nachdem Failover-Ereignisse eingetreten sind, du Hosts ersetzt oder eine DB-Instance-Klasse skalierst, kann sich die Datenbank-Eigentümerschaft von rdsa in NT AUTHORITY\SYSTEM ändern.

Um dieses Problem zu beheben, führe den folgenden Befehl aus, um die Datenbank-Eigentümerschaft wieder in rdsa zu ändern:

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

Weitere Informationen zu Wartungsaufgaben findest du unter Wie erstelle ich SQL-Server-Wartungsaufgaben in Amazon RDS?

Du kannst xp_cmdshell nicht aktivieren oder ausführen

Da Amazon RDS ein verwalteter Service ist, hast du keinen Zugriff auf das Betriebssystem und kannst die xp_cmdshell-Prozedur nicht ausführen.

Hinweis: Der Standardwert für den Parameter show advanced options ist falsch, aber sein Ausführungswert ist auf 1 festgelegt. Du musst also keine separaten SQL-Befehle ausführen, um den Parameter zu verwenden.

Wenn du xp_cmdshell für den Workload ausführen musst, verwende RDS Custom für SQL Server oder Microsoft SQL Server auf Amazon EC2.

Fehler bei gespeicherten OLE-Automatisierungs-Prozeduren

Zum Schutz der Instance-Stabilität und -Sicherheit sind die folgenden gespeicherten Prozeduren in Amazon RDS für SQL Server nicht verfügbar:

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

Verwende stattdessen RDS Custom für SQL Server, mit dem du das Betriebssystem und die Datenbank in der RDS-Umgebung anpassen kannst.

Du kannst nicht auf SQL-Server-Prüfungsprotokolle zugreifen

In Amazon RDS für SQL Server ist die Standard-SQL-Server-Funktion fn_get_audit_file nicht direkt zugänglich. Stattdessen musst du die RDS-Funktion msdb.dbo.rds_fn_get_audit_file verwenden.

Beispielbefehl, der msdb.dbo.rds_fn_get_audit_file verwendet:

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

Weitere Informationen findest du unter Unterstützung für SQL Server Audit.

Führe die folgende Abfrage aus, um Prüfdatensätze im Aufbewahrungsordner anzuzeigen:

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

Dir wurde die Berechtigung für sp_addmessage verweigert

Die gespeicherte Systemprozedur sp_addmessage erfordert, dass du Zugriff auf die Serverrollen sysadmin oder serveradmin hast. 

Da Amazon RDS dir nicht erlaubt, sysadmin oder serveradmin zu verwenden, ergreife stattdessen die folgenden Maßnahmen:

  • Verwende eine THROW-Anweisung, um benutzerdefinierte Ausnahmen auszulösen, ohne dass die Nachricht in sys.messages vordefiniert werden muss:

    THROW 50001, 'Custom error message for the application', 1;
  • Verwende eine RAISERROR-Anweisung, um benutzerdefinierte Fehlermeldungen zu generieren. Wenn du keine msg_id angibst, löst RAISERROR einen Fehler mit der Fehlernummer 50000 aus:

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

Wenn deine Anwendung die Rolle sysadmin benötigt, um sysadmin oder serveradmin auszuführen, verwende Amazon RDS Custom für SQL Server. Oder hoste SQL Server auf einer EC2-Instance. Weitere Informationen findest du unter Berechtigungen für das Hauptbenutzerkonto.

Bei der SSIS-Paketbereitstellung sind Fehler aufgetreten

Stelle sicher, dass die AWS Identity and Access Management (IAM)-Rolle, die der DB-Instance zugeordnet ist, über die erforderlichen Berechtigungen für den Zugriff auf den Amazon Simple Storage Service (Amazon S3)-Bucket verfügt. Informationen zu den Berechtigungsanforderungen findest du unter Integrieren einer DB-Instance von Amazon RDS für SQL Server mit Amazon S3.

Die DB-Instance und der S3-Bucket müssen sich in derselben AWS-Region befinden. Wenn sie sich in verschiedenen Regionen befinden, erstelle einen neuen S3-Bucket in derselben Region wie die DB-Instance.

Bei Datenflussaufgaben musst du BLOBTempStoragePath und BufferTempStoragePath auf einen Dateipfad setzen, der mit D:\S3\ beginnt.

Hinweis: Stelle sicher, dass alle Parameter, Variablen und Ausdrücke, die du für Dateiverbindungen verwendest, auf den Ordner D:\S3 verweisen.

Weitere Informationen findest du unter Unterstützung für SQL Server Integration Services (SSIS) in Amazon RDS für SQL Server und Integrieren einer DB-Instance von Amazon RDS für SQL Server mit Amazon S3.

Ressourcen-Governor verwenden

Um spezifische Ressourcenkontingente und Prioritäten für verschiedene Benutzer und Anwendungen festzulegen, verwende Ressourcen-Governor zur Steuerung der DB-Instance-Ressourcen. Du kannst bestimmte Kontingente dafür festlegen, wie Workloads CPU-, Arbeitsspeicher- und physische E/A-Ressourcen verwenden.

Ähnliche Informationen

Amazon RDS für Microsoft SQL Server

Amazon EC2 für SQL Server

Amazon RDS Custom

AWS OFFICIALAktualisiert vor 7 Monaten