Amazon Relational Database Service (Amazon RDS) for SQL Server ユーザーのログインアクセス許可のクローンを作成したいと考えています。
解決策
ストアドプロシージャを作成する
RDS for SQL Server のユーザーを複製するには、まず、ユーザーを複製する環境でストアドプロシージャを作成する必要があります。
ストアドプロシージャを作成するには、MSSQL_RDS_Clone_Login スクリプトを実行します。詳細については、GitHub ウェブサイトで MSSQL_RDS_Clone_Login スクリプトを参照してください。ストアドプロシージャは、RDS for SQL Server システムデータベース以外の任意のユーザーデータベースに作成できます。
MSSQL_RDS_Clone_Login スクリプトは、スクリプトを実行するユーザーにアクセス許可を付与するアクセス権がない限り、新しいログインを変更できません。ユーザーがアクセス許可を付与するためのアクセス権を持っていない場合、アクセス許可はスクリプトに表示されません。アクセス許可を付与するアクセス権がない状態でスクリプトにアクセス許可を手動で追加しようとすると、スクリプトは失敗します。
MSSQL_RDS_Clone_Login スクリプトは、次の 3 つのストアドプロシージャを作成します。
- DuplicateLogin: このプロシージャは、コピー元の各データベースのログインアクセス許可からログインユーザーとデータベースユーザーを複製します。
- GrantUserRoleMembership: このプロシージャは、DB ユーザーのアクセス許可とロールを新しいユーザーに複製します。
- DuplicateRDS: このプロシージャは、DuplicateLogin および GrantUserRoleMembership のストアドプロシージャの結果を統合します。
ストアドプロシージャを実行する
ストアドプロシージャを実行するには、次の手順を実行します。
-
新しい Transact-SQL (TSQL) ウィンドウを開きます。
-
CTRL+T を押して、結果がテキスト形式であることを確認します。
-
次のスクリプトを実行します。
SQL ログイン:
USE [DB_NAME]
EXEC DuplicateRDS @NewLogin=[duplicate_login_name]
,@NewLoginPwd = password
,@LoginToDuplicate = primary_login
,@WindowsLogin = F
,@DatabaseName=NULL
注: DB_NAME をユーザーデータベースの名前に、duplicate_login_name をログイン名に、password をパスワードに置き換えてください。
Windows ログイン:
USE [DB_NAME]
EXEC DuplicateRDS @NewLogin=[domain\duplicate_login_name]
,@LoginToDuplicate = primary_login
,@NewLoginPwd = NULL
,@WindowsLogin = T
,@DatabaseName=NULL
注: DB_NAME をユーザーデータベースの名前に、domain をドメイン名に、duplicate_login_name をログイン名に置き換えてください。
-
スクリプトが生成されたら、Results タブからスクリプトをコピーし、新しいクエリウィンドウで実行します。
注: スクリプトを実行すると、SQL Server ログインが生成され、プライマリログインと同様のサーバーレベルおよびデータベースレベルのアクセス許可が付与されます。
-
生成されたログインには、Microsoft SQL Server Integration Services (SSIS) SSISDB の ssis_admin と ssis_logreader 用のアクセス許可は含まれません。これらのアクセス許可が必要な場合は、次のコマンドを実行します。
ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO
注: mydomain をドメイン名に、user_name をユーザー名に置き換えてください。ストアドプロシージャが使用する一時テーブルが原因で、スクリプト出力の順序が乱れる場合があります。このような場合は、ストアドプロシージャを削除して再作成してください。
-
孤立したユーザーをチェックするには、次のスクリプトを実行します。
Use [DB_NAME] ;
GO
exec sp_change_users_login @Action='Report' ;
GO
注: DB_NAME をユーザーデータベースの名前に置き換えてください。
-
孤立したユーザーを削除するには、次のスクリプトを実行します。
Use [DB_NAME] ;
GO
exec sp_revokedbaccess 'username'
GO
注: DB_NAME をユーザーデータベースの名前に、username をユーザー名に置き換えてください。
-
ログインを複製した後にストアドプロシージャを保持したくない場合は、次のスクリプトを実行します。
USE [DB_NAME] ;
GO
DROP PROCEDURE [dbo].[DuplicateRDS]
GO
DROP PROCEDURE [dbo].[DuplicateLogin]
GO
DROP PROCEDURE [dbo].[GrantUserRoleMembership]
GO
注: DB_NAME をユーザーデータベースの名前に置き換えてください。