기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이 섹션에서는 DMS 데이터 수집기에 필요한 최소 권한을 가진 소스 데이터베이스 사용자를 생성하는 방법을 설명합니다.
이 섹션은 다음 주제를 포함합니다:
AWS DMS Fleet Advisor와 함께 데이터베이스 사용자 사용
DMS 데이터 수집기에서는 root
이외의 데이터베이스 사용자를 사용할 수 있습니다. 인벤토리에 데이터베이스를 추가한 후 데이터 수집기를 실행하기 전에 사용자 이름과 암호를 지정하십시오. 인벤토리에 데이터베이스를 추가하는 방법에 관한 자세한 내용은 에서 모니터링되는 객체 관리 AWS DMS 단원을 참조하십시오.
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