기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS DMS Fleet Advisor용 데이터베이스 사용자 생성
이 섹션에서는 DMS 데이터 수집기에 필요한 최소 권한을 가진 소스 데이터베이스 사용자를 생성하는 방법을 설명합니다.
이 섹션은 다음 주제를 포함합니다:
AWS DMS Fleet Advisor와 함께 데이터베이스 사용자 사용
DMS 데이터 수집기에서는 root
이외의 데이터베이스 사용자를 사용할 수 있습니다. 인벤토리에 데이터베이스를 추가한 후 데이터 수집기를 실행하기 전에 사용자 이름과 암호를 지정하십시오. 인벤토리에 데이터베이스를 추가하는 방법에 관한 자세한 내용은 모니터링되는 객체 관리 단원을 참조하십시오.
DMS 데이터 수집기 사용을 마친 후에는 생성한 데이터베이스 사용자를 삭제할 수 있습니다. 자세한 설명은 데이터베이스 사용자 삭제 섹션을 참조하세요.
중요
다음 예제에서는 {your_user_name}
을 데이터베이스용으로 만든 데이터베이스 사용자 이름으로 바꿉니다. 그런 다음, {your_password}
를 안전한 비밀번호로 바꾸십시오.
MySQL을 사용하여 데이터베이스 사용자 생성
MySQL 소스 데이터베이스에서 데이터베이스 사용자를 생성하려면 다음 스크립트를 사용합니다. MySQL 데이터베이스 버전에 따라 한 가지 버전의 GRANT
문을 유지해야 합니다.
CREATE USER
{your_user_name}
identified BY '{your_password}
'; GRANT PROCESS ON *.* TO{your_user_name}
; GRANT REFERENCES ON *.* TO{your_user_name}
; GRANT TRIGGER ON *.* TO{your_user_name}
; GRANT EXECUTE ON *.* TO{your_user_name}
; # For MySQL versions lower than 8.0, use the following statement. GRANT SELECT, CREATE TEMPORARY TABLES ON `temp`.* TO{your_user_name}
; # For MySQL versions 8.0 and higher, use the following statement. GRANT SELECT, CREATE TEMPORARY TABLES ON `mysql`.* TO{your_user_name}
; GRANT SELECT ON performance_schema.* TO{your_user_name}
; SELECT IF(round(Value1 + Value2 / 100 + Value3 / 10000, 4) > 5.0129, 'GRANT EVENT ON *.* TO{your_user_name}
;', 'SELECT ''Events are not applicable'';') sql_statement INTO @stringStatement FROM ( SELECT substring_index(ver, '.', 1) value1, substring_index(substring_index(ver, '.', 2), '.', - 1) value2, substring_index(ver, '.', - 1) value3 FROM ( SELECT IF((@@version regexp '[^0-9\.]+') != 0, @@innodb_version, @@version) AS ver FROM dual ) vercase ) v; PREPARE sqlStatement FROM @stringStatement; SET @stringStatement := NULL; EXECUTE sqlStatement; DEALLOCATE PREPARE sqlStatement;
Oracle을 사용하여 데이터베이스 사용자 생성
Oracle 소스 데이터베이스에서 데이터베이스 사용자를 생성하려면 다음 스크립트를 사용합니다.
이 SQL 스크립트를 실행하려면 SYSDBA
권한을 사용하여 Oracle 데이터베이스에 연결하십시오. 이 SQL 스크립트를 실행한 후 이 스크립트로 생성한 사용자의 보안 인증을 사용하여 데이터베이스에 연결합니다. 또한 이 사용자의 보안 인증을 사용하여 DMS 데이터 수집기를 실행할 수 있습니다.
다음 스크립트는 Oracle 멀티테넌트 컨테이너 데이터베이스(CDB)의 사용자 이름에 C##
접두사를 추가합니다.
CREATE USER
{your_user_name}
IDENTIFIED BY "{your_password}
"; GRANT CREATE SESSION TO{your_user_name}
; GRANT SELECT ANY DICTIONARY TO{your_user_name}
; GRANT SELECT ON DBA_WM_SYS_PRIVS TO{your_user_name}
; BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( acl => UPPER('{your_user_name}
') || '_Connect_Access.xml', description => 'Connect Network', principal => UPPER('{your_user_name}
'), is_grant => TRUE, privilege => 'resolve', start_date => NULL, end_date => NULL); DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL( acl => UPPER('{your_user_name}
') || '_Connect_Access.xml', host => '*', lower_port => NULL, upper_port => NULL); END;
PostgreSQL을 사용하여 데이터베이스 사용자 생성
PostgreSQL 소스 데이터베이스에서 데이터베이스 사용자를 생성하려면 다음 스크립트를 사용합니다.
CREATE USER "
{your_user_name}
" WITH LOGIN PASSWORD '{your_password}
'; GRANT pg_read_all_settings TO "{your_user_name}
"; -- For PostgreSQL versions 10 and higher, add the following statement. GRANT EXECUTE ON FUNCTION pg_ls_waldir() TO "{your_user_name}
";
Microsoft SQL Server를 사용하여 데이터베이스 사용자 생성
Microsoft SQL Server 소스 데이터베이스에서 데이터베이스 사용자를 생성하려면 다음 스크립트를 사용합니다.
USE master GO IF NOT EXISTS (SELECT * FROM sys.sql_logins WHERE name = N'
{your_user_name}
') CREATE LOGIN [{your_user_name}
] WITH PASSWORD=N'{your_password}
', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO GRANT VIEW SERVER STATE TO [{your_user_name}
] GRANT VIEW ANY DEFINITION TO [{your_user_name}
] GRANT VIEW ANY DATABASE TO [{your_user_name}
] IF LEFT(CONVERT(SYSNAME,SERVERPROPERTY('ProductVersion')), CHARINDEX('.', CONVERT(SYSNAME,SERVERPROPERTY('ProductVersion')), 0)-1) >= 12 EXECUTE('GRANT CONNECT ANY DATABASE TO [{your_user_name}
]') DECLARE @dbname VARCHAR(100) DECLARE @statement NVARCHAR(max) DECLARE db_cursor CURSOR LOCAL FAST_FORWARD FOR SELECT name FROM MASTER.sys.databases WHERE state = 0 AND is_read_only = 0 OPEN db_cursor FETCH NEXT FROM db_cursor INTO @dbname WHILE @@FETCH_STATUS = 0 BEGIN SELECT @statement = 'USE '+ quotename(@dbname) +';'+ ' IF NOT EXISTS (SELECT * FROM sys.syslogins WHERE name = ''{your_user_name}
'') OR NOT EXISTS (SELECT * FROM sys.sysusers WHERE name = ''{your_user_name}
'') CREATE USER [{your_user_name}
] FOR LOGIN [{your_user_name}
]; EXECUTE sp_addrolemember N''db_datareader'', [{your_user_name}
]' BEGIN TRY EXECUTE sp_executesql @statement END TRY BEGIN CATCH DECLARE @err NVARCHAR(255) SET @err = error_message() PRINT @dbname PRINT @err END CATCH FETCH NEXT FROM db_cursor INTO @dbname END CLOSE db_cursor DEALLOCATE db_cursor USE msdb GO GRANT EXECUTE ON dbo.agent_datetime TO [{your_user_name}
]
데이터베이스 사용자 삭제
모든 데이터 수집 작업을 완료한 후에는 DMS 데이터 수집기에 대해 생성한 데이터베이스 사용자를 삭제할 수 있습니다. 다음 스크립트를 사용하여 데이터베이스에서 최소 권한을 가진 사용자를 삭제할 수 있습니다.
MySQL 데이터베이스에서 사용자를 삭제하려면 다음 스크립트를 실행합니다.
DROP USER IF EXISTS "
{your_user_name}
";
Oracle 데이터베이스에서 사용자를 삭제하려면 다음 스크립트를 실행합니다.
DECLARE -- Input parameters, please set correct value cnst$user_name CONSTANT VARCHAR2(255) DEFAULT '
{your_user_name}
'; -- System variables, please, don't change var$is_exists INTEGER DEFAULT 0; BEGIN SELECT COUNT(hal.acl) INTO var$is_exists FROM dba_host_acls hal WHERE hal.acl LIKE '%' || UPPER(cnst$user_name) || '_Connect_Access.xml'; IF var$is_exists > 0 THEN DBMS_NETWORK_ACL_ADMIN.DROP_ACL( acl => UPPER(cnst$user_name) || '_Connect_Access.xml'); END IF; SELECT COUNT(usr.username) INTO var$is_exists FROM all_users usr WHERE usr.username = UPPER(cnst$user_name); IF var$is_exists > 0 THEN EXECUTE IMMEDIATE 'DROP USER ' || cnst$user_name || ' CASCADE'; END IF; END;
PostgreSQL 데이터베이스에서 사용자를 삭제하려면 다음 스크립트를 실행합니다.
DROP USER IF EXISTS "
{your_user_name}
";
SQL Server 데이터베이스에서 사용자를 삭제하려면 다음 스크립트를 실행합니다.
USE msdb GO REVOKE EXECUTE ON dbo.agent_datetime TO [
{your_user_name}
] USE master GO DECLARE @dbname VARCHAR(100) DECLARE @statement NVARCHAR(max) DECLARE db_cursor CURSOR LOCAL FAST_FORWARD FOR SELECT name FROM MASTER.sys.databases WHERE state = 0 AND is_read_only = 0 OPEN db_cursor FETCH NEXT FROM db_cursor INTO @dbname WHILE @@FETCH_STATUS = 0 BEGIN SELECT @statement = 'USE '+ quotename(@dbname) +';'+ ' EXECUTE sp_droprolemember N''db_datareader'', [{your_user_name}
] IF EXISTS (SELECT * FROM sys.syslogins WHERE name = ''{your_user_name}
'') OR EXISTS (SELECT * FROM sys.sysusers WHERE name = ''{your_user_name}
'') DROP USER [{your_user_name}
];' BEGIN TRY EXECUTE sp_executesql @statement END TRY BEGIN CATCH DECLARE @err NVARCHAR(255) SET @err = error_message() PRINT @dbname PRINT @err END CATCH FETCH NEXT FROM db_cursor INTO @dbname END CLOSE db_cursor DEALLOCATE db_cursor GO IF EXISTS (SELECT * FROM sys.sql_logins WHERE name = N'{your_user_name}
') DROP LOGIN [{your_user_name}
] -- Use for SQL login GO