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 스크립트는 세 가지 저장 프로시저를 생성합니다.
- 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을 로그인 이름으로 바꿉니다.
-
스크립트가 생성되면 결과 탭에서 스크립트를 복사한 다음, 새 쿼리 창에서 실행합니다.
참고: 스크립트를 실행한 후 기본 로그인과 유사한 서버 및 데이터베이스 수준 권한으로 SQL Server 로그인이 생성됩니다.
-
생성된 로그인에는 ssis_admin 및 ssis_logreader에 대한 Microsoft SQL Server Integration Services(SSIS) SSISDB 권한이 제외됩니다. 이러한 권한이 필요한 경우 다음 명령을 실행합니다.
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을 사용자 데이터베이스 이름으로 바꿉니다.