スキップしてコンテンツを表示

Amazon RDS for SQL Server の SQL コマンドとストアドプロシージャに関するアクセス許可の問題を解決する方法を教えてください。

所要時間3分
0

SQL コマンドを実行したり、ストアドプロシージャを実行したり、Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server を管理したりするためのアクセス許可の問題を解決したいと考えています。

簡単な説明

次のアクションを実行すると、アクセス許可エラーが表示される場合があります。

  • sp_updatestats、sp_configure、xp_cmdshell などのシステムプロシージャーを実行して、データベースを構成および管理する。
  • カスタムストアドプロシージャを実行する。
  • 監査ログを取得する。
  • SQL Server Integration Services (SSIS) をデプロイする。
  • SQL Server Management Studio (SSMS) を使用する。

サービスの安定性、セキュリティ、管理性を維持するために、Amazon RDS または SQL Server は sysadmin などのサーバーレベルのロールをサポートしていません。詳細については、「Microsoft SQL Server のセキュリティ」を参照してください。

ワークロードに、標準の RDS for SQL Server ではサポートされていない機能が必要な場合は、RDS Custom for SQL Server を使用してください。SQL Server データベース (DB) インスタンスとオペレーティングシステム (OS) を完全に制御するには、Amazon Elastic Compute Cloud (Amazon EC2) 上の SQL Server を使用してください。SQL Server データベースの Amazon EC2 と Amazon RDS の違いを比較するには、「Choosing between Amazon EC2 and Amazon RDS」(Amazon EC2 と Amazon RDS のどちらかを選ぶ) を参照してください。

解決策

sp_configure と RECONFIGURE でエラーが発生する

sp_configure や RECONFIGURE などのサーバーレベルの設定を管理するには、DB パラメータグループを使用します。

注: 静的パラメータを変更した場合、パラメータを有効にするには DB インスタンスを再起動する必要があります。最大並列度 (MAXDOP) などの動的パラメータの変更は、再起動しなくてもすぐに有効になります。パフォーマンスパラメータのその他の例については、「Best practices for configuring performance parameters for Amazon RDS for SQL Server」(Amazon RDS for SQL Server のパフォーマンスパラメータを設定するためのベストプラクティス) を参照してください。

sp_updatestats でエラーが発生する

sp_updatestats の問題を解決するには、次のいずれかの回避策を使用してください。

  • 次のコマンドを実行して、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
  • データベース内のすべてのテーブルの統計を更新するには、次のコマンドを実行して動的 SQL で UPDATE STATISTICS を使用します。

    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
  • 次のコマンドを実行して sp_MSforeachtable を使用します。

    EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'

ラッパープロシージャが失敗した場合は、データベースの所有者を確認してください。フェイルオーバーイベントが発生したり、ホストを交換したり、DB インスタンスクラスをスケーリングしたりすると、データベースの所有権が rdsa から NT AUTHORITY\SYSTEM に変更されることがあります。

この問題を解決するには、次のコマンドを実行してデータベースの所有権を rdsa に戻します。

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

メンテナンスタスクの詳細については、「How do I create SQL Server maintenance tasks in Amazon RDS?」(Amazon RDS で SQL Server メンテナンスタスクを作成する方法を教えてください) を参照してください。

xp_cmdshell を有効にしたり実行したりできない

Amazon RDS はマネージドサービスであるため、OS にアクセスできず、xp_cmdshell プロシージャを実行することもできません。

注: show advanced options パラメーターデフォルト値は false ですが、実行値は 1 に設定されています。そのため、パラメータを使用するために別々の SQL コマンドを実行する必要はありません。

ワークロードに xp_cmdshell を実行する必要がある場合は、RDS Custom for SQL Server または Amazon EC2 上の Microsoft SQL Server を使用してください。

OLE オートメーションストアドプロシージャのエラー

インスタンスの安定性とセキュリティを保護するため、以下のストアドプロシージャは Amazon RDS for SQL Server では使用できません。

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

代わりに、RDS 環境内の OS とデータベースをカスタマイズできる RDS Custom for SQL Server を使用してください。

SQL Server の監査ログにアクセスできない

Amazon RDS for SQL Server では、標準の SQL Server 関数 fn_get_audit_file には直接アクセスできません。代わりに、RDS 関数 msdb.dbo.rds_fn_get_audit_file を使用する必要があります。

msdb.dbo.rds_fn_get_audit_file を使用するコマンドの例:

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

詳細については、「SQL Server Audit のサポート」を参照してください。

保存フォルダーの監査レコードを表示するには、次のクエリを実行します。

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

sp_addmessage へのアクセス許可が拒否された

システムストアドプロシージャ sp_addmessage を使用するには、sysadmin または serveradmin サーバーロールにアクセスできる必要があります。

Amazon RDS では sysadmin または serveradmin を使用できないため、代わりに次のアクションを実行してください。

  • THROW ステートメントを使用すると、sys.messages でメッセージを事前に定義しなくても、カスタム例外を発生させることができます。

    THROW 50001, 'Custom error message for the application', 1;
  • **RAISERROR ** ステートメントを使用してカスタムエラーメッセージを生成します。msg_id を指定しない場合、RAISERROR はエラー番号 50000 のエラーを発生させます。

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

アプリケーションで sysadmin または serveradmin を実行するために sysadmin ロールが必要な場合は、Amazon RDS Custom for SQL Server を使用してください。または、EC2 インスタンスで SQL Server をホストします。詳細については、「マスターユーザーアカウント権限」を参照してください。

SSIS パッケージのデプロイが失敗した

DB インスタンスに関連付けられている AWS Identity and Access Management (IAM) ロールに、Amazon Simple Storage Service (Amazon S3) バケットへのアクセスに必要なアクセス許可があることを確認してください。アクセス許可の要件については、「Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合」を参照してください。

DB インスタンスと S3 バケットは同じ AWS リージョンにある必要があります。異なるリージョンにある場合は、DB インスタンスと同じリージョンに新しい S3 バケットを作成します。

データフロータスクでは、BlobTempStoragePath と BufferTempStoragePath を D:\S3\ で始まるファイルパスに設定する必要があります。

注: ファイル接続に使用するすべてのパラメータ、変数、および式が D:\S3 フォルダを指していることを確認してください。

詳細については、「Amazon RDS for SQL Server での SQL Server Integration Services のサポート」および「Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合」を参照してください。

リソースガバナーを使用する

さまざまなユーザーやアプリケーションに特定のリソースクォータと優先順位を設定するには、リソースガバナーを使用して DB インスタンスのリソースを制御します。ワークロードが CPU、メモリ、物理 I/O リソースをどのように使用するかについて、特定のクォータを設定できます。

関連情報

Amazon RDS for Microsoft SQL Server

Amazon EC2 for SQL Server

Amazon RDS Custom

AWS公式更新しました 8ヶ月前
コメントはありません