

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
<a name="fa-database-users"></a>

**importante**  
Aviso de fin de soporte: el 20 de mayo de 2026, AWS dejará de dar soporte a AWS Database Migration Service Fleet Advisor. Después del 20 de mayo de 2026, ya no podrá acceder a la consola de AWS DMS Fleet Advisor ni a los recursos de AWS DMS Fleet Advisor. Para obtener más información, consulte [Fin del soporte de AWS DMS Fleet Advisor](https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html).

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.

**Topics**
+ [Uso de un usuario de base de datos con AWS DMS Fleet Advisor](#fa-database-users-using)
+ [Creación de un usuario de base de datos con MySQL](#fa-database-users-mysql)
+ [Creación de un usuario de base de datos con Oracle](#fa-database-users-oracle)
+ [Creación de un usuario de base de datos con PostgreSQL](#fa-database-users-postgresql)
+ [Creación de un usuario de base de datos con Microsoft SQL Server](#fa-database-users-sql-server)
+ [Eliminación de usuarios de base de datos](#fa-database-users-drop)

## Uso de un usuario de base de datos con AWS DMS Fleet Advisor
<a name="fa-database-users-using"></a>

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 [Administrar los objetos monitoreados en AWS DMS](fa-managing-objects.md). 

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](#fa-database-users-drop).

**importante**  
En los ejemplos siguientes, sustituya *\$1your\$1user\$1name\$1* por el nombre del usuario de la base de datos que creó para la base de datos. Por último, sustituya *\$1your\$1password\$1* por una contraseña segura.

## Creación de un usuario de base de datos con MySQL
<a name="fa-database-users-mysql"></a>

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
<a name="fa-database-users-oracle"></a>

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
<a name="fa-database-users-postgresql"></a>

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
<a name="fa-database-users-sql-server"></a>

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
<a name="fa-database-users-drop"></a>

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
```