

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Membuat pengguna database untuk AWS DMS Fleet Advisor
<a name="fa-database-users"></a>

**penting**  
Pemberitahuan akhir dukungan: Pada 20 Mei 2026, AWS akan mengakhiri dukungan untuk Penasihat AWS Database Migration Service Armada. Setelah 20 Mei 2026, Anda tidak akan lagi dapat mengakses konsol Penasihat AWS DMS Armada atau sumber daya Penasihat AWS DMS Armada. Untuk informasi lebih lanjut, lihat [akhir dukungan AWS DMS Fleet Advisor](https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html).

Bagian ini menjelaskan cara membuat pengguna untuk basis data sumber Anda dengan izin minimum yang diperlukan untuk pengumpul data DMS.

**Topics**
+ [Menggunakan pengguna database dengan AWS DMS Fleet Advisor](#fa-database-users-using)
+ [Membuat pengguna database dengan MySQL](#fa-database-users-mysql)
+ [Membuat pengguna database dengan Oracle](#fa-database-users-oracle)
+ [Membuat pengguna database dengan PostgreSQL](#fa-database-users-postgresql)
+ [Membuat pengguna database dengan Microsoft SQL Server](#fa-database-users-sql-server)
+ [Menghapus pengguna basis data](#fa-database-users-drop)

## Menggunakan pengguna database dengan AWS DMS Fleet Advisor
<a name="fa-database-users-using"></a>

Anda dapat menggunakan pengguna database selain `root` dengan pengumpul data DMS. Tentukan nama pengguna dan kata sandi setelah menambahkan database ke inventaris, tetapi sebelum Anda menjalankan pengumpul data Anda. Untuk informasi selengkapnya tentang menambahkan database ke inventaris, lihat[Mengelola objek yang dipantau di AWS DMS](fa-managing-objects.md). 

Setelah Anda selesai menggunakan pengumpul data DMS, Anda dapat menghapus pengguna database yang Anda buat. Untuk informasi selengkapnya, lihat [Menghapus pengguna basis data](#fa-database-users-drop).

**penting**  
Dalam contoh berikut, ganti *\$1your\$1user\$1name\$1* dengan nama pengguna database yang Anda buat untuk database Anda. Kemudian, ganti *\$1your\$1password\$1* dengan kata sandi yang aman.

## Membuat pengguna database dengan MySQL
<a name="fa-database-users-mysql"></a>

Untuk membuat pengguna database dalam database sumber MySQL, gunakan skrip berikut. Pastikan Anda menyimpan satu versi `GRANT` pernyataan yang bergantung pada versi database MySQL Anda.

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

## Membuat pengguna database dengan Oracle
<a name="fa-database-users-oracle"></a>

Untuk membuat pengguna database dalam database sumber Oracle, gunakan skrip berikut.

Untuk menjalankan skrip SQL ini, sambungkan ke database Oracle Anda menggunakan `SYSDBA` hak istimewa. Setelah Anda menjalankan skrip SQL ini, sambungkan ke database Anda menggunakan kredensi pengguna yang Anda buat dengan skrip ini. Juga, gunakan kredensil pengguna ini untuk menjalankan pengumpul data DMS.

Script berikut menambahkan `C##` awalan untuk nama pengguna untuk Oracle multitenant database container (CDB).

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

## Membuat pengguna database dengan PostgreSQL
<a name="fa-database-users-postgresql"></a>

Untuk membuat pengguna database dalam database sumber PostgreSQL, gunakan skrip berikut.

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

## Membuat pengguna database dengan Microsoft SQL Server
<a name="fa-database-users-sql-server"></a>

Untuk membuat pengguna database dalam database sumber Microsoft SQL Server, gunakan skrip berikut.

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

## Menghapus pengguna basis data
<a name="fa-database-users-drop"></a>

Setelah Anda menyelesaikan semua tugas pengumpulan data, Anda dapat menghapus pengguna database yang Anda buat untuk pengumpul data DMS. Anda dapat menggunakan skrip berikut untuk menghapus pengguna dengan izin minimum dari database Anda.

Untuk menghapus pengguna dari database MySQL Anda, jalankan skrip berikut.

```
DROP USER IF EXISTS "{your_user_name}";
```

Untuk menghapus pengguna dari database Oracle Anda, jalankan skrip berikut.

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

Untuk menghapus pengguna dari database PostgreSQL Anda, jalankan skrip berikut.

```
DROP USER IF EXISTS "{your_user_name}";
```

Untuk menghapus pengguna dari database SQL Server Anda, jalankan skrip berikut.

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