Creación de usuarios de bases de datos para AWS DMS Fleet Advisor - AWS Database Migration Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación de usuarios de bases de datos para AWS DMS Fleet Advisor

En esta sección se describe cómo crear usuarios para las bases de datos de origen con los permisos mínimos necesarios para el recopilador de datos de DMS.

Uso de un usuario de base de datos con AWS DMS Fleet Advisor

Puede utilizar un usuario de base de datos que no sea root con el recopilador de datos de DMS. Especifique el nombre de usuario y la contraseña después de agregar la base de datos al inventario, pero antes de ejecutar el recopilador de datos. Para obtener más información acerca de cómo agregar bases de datos al inventario, consulte Administración de objetos monitoreados.

Cuando termine de utilizar el recopilador de datos de DMS, podrá eliminar los usuarios de la base de datos que haya creado. Para obtener más información, consulte Eliminación de usuarios de base de datos.

importante

En los ejemplos siguientes, sustituya {your_user_name} por el nombre del usuario de la base de datos que creó para la base de datos. Por último, sustituya {your_password} por una contraseña segura.

Creación de un usuario de base de datos con MySQL

Para crear un usuario de base de datos en una base de datos de origen de MySQL, utilice el siguiente script. Asegúrese de conservar una versión de la instrucción GRANT que depende de la versión de la base de datos de MySQL.

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;

Creación de un usuario de base de datos con Oracle

Para crear un usuario de base de datos en una base de datos de origen de Oracle, utilice el siguiente script.

Para ejecutar este script SQL, conéctese a la base de datos de Oracle mediante privilegios SYSDBA. Tras ejecutar este script SQL, conéctese a la base de datos con las credenciales del usuario que creó con este script. Utilice también las credenciales de este usuario para ejecutar el recopilador de datos de DMS.

El siguiente script agrega el prefijo C## al nombre del usuario para las bases de datos de contenedores multitenencia (CDB) de Oracle.

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;

Creación de un usuario de base de datos con PostgreSQL

Para crear un usuario de base de datos en una base de datos de origen de PostgreSQL, utilice el siguiente script.

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}";

Creación de un usuario de base de datos con Microsoft SQL Server

Para crear un usuario de base de datos en una base de datos de origen de Microsoft SQL Server, utilice el siguiente script.

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}]

Eliminación de usuarios de base de datos

Tras completar todas las tareas de recopilación de datos, puede eliminar los usuarios de la base de datos que creó para el recopilador de datos de DMS. Puede usar los siguientes scripts para eliminar los usuarios con permisos mínimos de las bases de datos.

Para eliminar el usuario de base de datos de MySQL, ejecute el siguiente script.

DROP USER IF EXISTS "{your_user_name}";

Para eliminar el usuario de base de datos de Oracle, ejecute el siguiente script.

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;

Para eliminar el usuario de base de datos de PostgreSQL, ejecute el siguiente script.

DROP USER IF EXISTS "{your_user_name}";

Para eliminar el usuario de base de datos de SQL Server, ejecute el siguiente script.

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