

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

# Menyiapkan otentikasi Kerberos menggunakan grup keamanan Active Directory untuk Babelfish
<a name="babelfish-kerberos-securityad"></a>

Mulai dari Babelfish versi 4.2.0, Anda dapat mengatur otentikasi Kerberos untuk Babelfish dengan grup keamanan Active Directory. Berikut ini adalah prasyarat yang harus diselesaikan untuk menyiapkan otentikasi Kerberos menggunakan Active Directory: 
+  Anda harus mengikuti semua langkah yang disebutkan di[Autentikasi Kerberos dengan Babelfish](babelfish-active-directory.md). 
+ Pastikan instans DB dikaitkan dengan Active Directory. Untuk memverifikasi ini, Anda dapat melihat status keanggotaan domain di konsol atau dengan menjalankan perintah [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI.

  Status instans DB harus diaktifkan kerberos. Untuk informasi selengkapnya tentang memahami keanggotaan domain, lihat[Memahami keanggotaan Domain](postgresql-kerberos-managing.md#postgresql-kerberos-managing.understanding).
+ Verifikasi pemetaan antara nama domain NetBIOS dan nama domain DNS menggunakan kueri berikut:

  ```
  SELECT netbios_domain_name, fq_domain_name FROM babelfish_domain_mapping;
  ```
+ Sebelum melanjutkan lebih jauh, verifikasi otentikasi Kerberos menggunakan login individu berfungsi seperti yang diharapkan. Koneksi menggunakan otentikasi Kerberos sebagai pengguna Active Directory harus berhasil. Jika Anda menghadapi masalah apa pun, lihat[Kesalahan yang sering terjadi](babelfish-active-directory.md#babelfish-active-directory-errors).

## Menyiapkan ekstensi pg\$1ad\$1mapping
<a name="babelfish-kerberos-securityad-setpgextn"></a>

 Anda harus mengikuti semua langkah yang disebutkan di[Menyiapkan ekstensi pg\$1ad\$1mapping](AD.Security.Groups.md#AD.Security.Groups.Setup). Untuk memverifikasi bahwa ekstensi diinstal, jalankan kueri berikut dari titik akhir TDS: 

```
1> SELECT extname, extversion FROM pg_extension where extname like 'pg_ad_mapping';
2> GO
extname       extversion
------------- ----------
pg_ad_mapping 0.1

(1 rows affected)
```

## Mengelola Login Grup
<a name="babelfish-kerberos-securityad-managing"></a>

 Buat login grup dengan mengikuti langkah-langkah yang disebutkan di[Mengatur Login](babelfish-active-directory.md#babelfish-active-directory-login-managing). Kami menyarankan agar nama login sama dengan nama grup keamanan Active Directory (AD) untuk perawatan yang lebih mudah, meskipun itu tidak wajib. Contoh: 

```
CREATE LOGIN [corp\accounts-group] FROM WINDOWS [WITH DEFAULT_DATABASE=database]
```

# Memetakan login grup T-SQL dengan grup keamanan AD
<a name="babelfish-kerberos-securityad-maptsql"></a>

 Anda perlu secara eksplisit menyediakan Login Grup Windows T-SQL untuk setiap grup keamanan AD yang memerlukan akses ke server database. Pengguna AD, yang merupakan bagian dari setidaknya satu grup keamanan AD yang disediakan, akan mendapatkan akses ke server database.

**catatan**  
Login T-SQL ini tidak dapat lagi mengautentikasi menggunakan otentikasi berbasis kata sandi.

 Misalnya, grup akun adalah grup keamanan di AD dan jika Anda ingin menyediakan grup keamanan ini di Babelfish, Anda harus menggunakan format [corp\$1 accounts-group].
+ Grup Keamanan AD: grup akun
+ Login TSQL: [corp\$1 akun-grup]
+ Peran PG setara untuk Login TSQL yang diberikan: accounts-group@CORP.EXAMPLE.COM

 Admin sekarang dapat melanjutkan untuk membuat pemetaan antara grup keamanan AD dan login T-SQL dari titik akhir PostgreSQL melalui perintah psql berikut. Untuk informasi selengkapnya tentang penggunaan fungsi, lihat[Menggunakan fungsi dari `pg_ad_mapping` ekstensi](AD.Security.Groups.md#AD.Security.Groups.functions). 

**catatan**  
Login T-SQL harus ditentukan dalam format login\$1name @FQDN sambil menambahkan pemetaan. Bobot diabaikan saat menghubungkan melalui titik akhir TDS. Untuk informasi selengkapnya tentang penggunaan bobot, lihat[Menghubungkan ke Babelfish melalui titik akhir PostgreSQL pada port PostgreSQL](babelfish-kerberos-securityad-connect-pgendpoint.md).

```
postgres=>select pgadmap_set_mapping('accounts-group', 'accounts-group@CORP.EXAMPLE.COM', <SID>, <Weight>);
```

Untuk informasi tentang mengambil SID grup keamanan AD, lihat[Mengambil SID Grup Direktori Aktif di PowerShell](AD.Security.Groups.md#AD.Security.Groups.retrieving).

Tabel berikut menunjukkan contoh pemetaan dari grup keamanan AD ke login T-SQL:


| Grup Keamanan AD | Login TSQL | Peran PG yang setara untuk Login TSQL yang diberikan | Bobot | 
| --- | --- | --- | --- | 
| akun-grup | [korp\$1 akun-grup] | accounts-group@CORP.EXAMPLE.COM | 7 | 
| kelompok penjualan | [corp\$1 kelompok penjualan] | sales-group@CORP.EXAMPLE.COM | 10 | 
| kelompok pengembang | [korp\$1 dev-grup] | dev-group@CORP.EXAMPLE.COM | 7 | 

```
postgres=> select admap.ad_sid, admap.ad_grp, lgn.orig_loginname, lgn.rolname, admap.weight from pgadmap_read_mapping() as admap, sys.babelfish_authid_login_ext as lgn where admap.pg_role = lgn.rolname;
    ad_sid    |     ad_grp     |    orig_loginname   |             rolname             | weight
--------------+----------------+---------------------+---------------------------------+--------
 S-1-5-67-890 | accounts-group | corp\accounts-group  | accounts-group@CORP.EXAMPLE.COM |     7
 S-1-2-34-560 | sales-group    | corp\sales-group     | sales-group@CORP.EXAMPLE.COM    |     10
 S-1-8-43-612 | dev-group      | corp\dev-group       | dev-group@CORP.EXAMPLE.COM      |     7
 (7 rows)
```

# Menghubungkan ke Babelfish melalui titik akhir TDS
<a name="babelfish-kerberos-securityad-connect"></a>

 Dalam contoh berikut, user1 adalah anggota accounts-group dan sales-group, user2 adalah anggota accounts-group dan dev-group. 


| nama pengguna | Keanggotaan Grup Keamanan AD | 
| --- | --- | 
| user1 | akun-grup, grup penjualan | 
| user2 | akun-grup, dev-group | 

 Connect ke server database Babelfish menggunakan utilitas sqlcmd. Anda dapat memverifikasi apakah pengguna (user1 dalam contoh ini) telah diautentikasi menggunakan Kerberos dengan mengikuti contoh di bawah ini: 

```
1> select principal, gss_authenticated from pg_stat_gssapi where pid = pg_backend_pid();
2>  GO
principal               gss_authenticated
----------------------  -----------------
user1@CORP.EXAMPLE.COM  1 

((1 rows affected))
1> select suser_name();
2>  GO
suser_name
----------
corp\user1 

(1 rows affected)
```

 Dalam contoh ini, user1 akan mewarisi hak istimewa akun-grup dan grup penjualan. Anda dapat memverifikasi keanggotaan grup menggunakan tampilan `sys.login_token` sistem. 

```
1> SELECT name, type FROM sys.login_token;
2>  GO
name                type
------------------- ----
corp\accounts-group WINDOWS GROUP
corp\sales-group    WINDOWS GROUP

(2 rows affected)
```

## Audit dan Pencatatan
<a name="babelfish-kerberos-securityad-audit"></a>

 Untuk menentukan identitas utama keamanan AD, gunakan perintah berikut: 

```
1> select suser_name();
2> GO
suser_name
----------
corp\user1

(1 rows affected)
```

Saat ini, identitas pengguna AD tidak terlihat di log. Anda dapat mengaktifkan `log_connections` parameter untuk mencatat pembentukan sesi DB. Untuk informasi selengkapnya, lihat [log\$1connections](https://docs.aws.amazon.com/prescriptive-guidance/latest/tuning-postgresql-parameters/log-connections.html). Outputnya mencakup identitas pengguna AD sebagai prinsipal seperti yang ditunjukkan pada contoh berikut. PID backend yang terkait dengan output ini kemudian dapat membantu tindakan atribut kembali ke pengguna AD yang sebenarnya.

```
bbf_group_ad_login@babelfish_db:[615]:LOG: connection authorized: user=bbf_group_ad_login database=babelfish_db application_name=sqlcmd GSS (authenticated=yes, encrypted=yes, principal=user1@CORP.EXAMPLE.COM)
```

# Memanfaatkan hak istimewa keanggotaan grup keamanan AD
<a name="babelfish-kerberos-securityad-privileges"></a>

## Mewarisi hak istimewa tingkat server
<a name="babelfish-kerberos-securityad-inheritpriv-server"></a>

 Pengguna AD yang merupakan anggota grup keamanan AD yang diberikan akan mewarisi hak istimewa tingkat server yang diberikan kepada login grup Windows yang dipetakan. Misalnya, pertimbangkan grup keamanan `accounts-group` AD, yang diberikan keanggotaan ke peran `sysadmin` server di Babelfish. Anda dapat mewarisi hak istimewa tingkat server menggunakan perintah berikut: 

```
1> ALTER SERVER ROLE sysadmin ADD MEMBER [corp\accounts-group];
```

 Akibatnya, setiap pengguna Active Directory yang merupakan anggota grup keamanan `accounts-group` AD akan mewarisi hak istimewa tingkat server yang terkait dengan peran tersebut. `sysadmin` Ini berarti bahwa pengguna seperti`corp\user1`, menjadi anggota`accounts-group`, sekarang akan memiliki kemampuan untuk melakukan operasi tingkat server dalam Babelfish.

**catatan**  
 Untuk melakukan tingkat server DDLs, login Windows untuk pengguna AD individu harus ada. Untuk informasi selengkapnya, lihat [Batasan](babelfish-kerberos-securityad-limitations.md). 

## Mewarisi hak istimewa tingkat basis data
<a name="babelfish-kerberos-securityad-inheritpriv-database"></a>

 Untuk memberikan hak istimewa tingkat database, pengguna database harus dibuat dan dipetakan dengan login grup Windows. Pengguna AD yang merupakan anggota grup keamanan AD yang diberikan akan mewarisi hak istimewa tingkat database yang diberikan kepada pengguna database tersebut. Dalam contoh berikut, Anda dapat melihat bagaimana hak istimewa tingkat basis data untuk grup Windows [corp\$1 accounts-group] ditetapkan. 

```
1> CREATE DATABASE db1; 
2> GO
1> USE db1;
2> GO
Changed database context to 'db1'.
1> CREATE TABLE dbo.t1(a int);
2> GO
```

 Buat pengguna database [corp\$1 sales-group] untuk login grup Windows [corp\$1 accounts-group]. Untuk melakukan langkah ini, hubungkan melalui titik akhir TDS menggunakan login yang merupakan anggota sysadmin. 

```
1> CREATE USER [corp\accounts-group] FOR LOGIN [corp\accounts-group];
2> GO
```

 Sekarang, hubungkan sebagai pengguna AD user1 untuk memeriksa akses tabel t1. Karena kami belum memberikan hak istimewa tingkat basis data, itu akan menghasilkan kesalahan izin ditolak. 

```
1> SELECT * FROM dbo.t1;
2> GO
Msg 33557097, Level 16, State 1, Server db-inst, Line 1
permission denied for table t1
```

Berikan SELECT pada tabel t1 kepada pengguna database [corp\$1 accounts-group]. Untuk melakukan langkah ini, hubungkan melalui titik akhir TDS menggunakan login yang merupakan anggota sysadmin.

```
1> GRANT SELECT ON dbo.t1 TO [corp\accounts-group];
2> GO
```

 Connect as AD user user1 untuk memvalidasi akses. 

```
1> SELECT * FROM dbo.t1;
2> GO
a
-----------

(0 rows affected)
```

# Menangani perilaku Pernyataan DDL berdasarkan skema default atau eksplisit
<a name="babelfish-kerberos-securityad-ddl"></a>

 Saat menggunakan sesi yang diautentikasi AD, skema default untuk sesi saat ini ditentukan oleh kondisi berikut: 
+ Jika pengguna database individu ada, skema default pengguna dianggap sebagai skema default sesi saat ini.
+ Jika skema default untuk pengguna database grup ada, skema default pengguna basis data grup dianggap sebagai skema default sesi saat ini dengan id utama terkecil.

## Memahami perilaku pernyataan CREATE DDL
<a name="babelfish-kerberos-securityad-ddlcreate"></a>

 Jika tidak ada skema eksplisit yang ditentukan dalam pernyataan CREATE DDL maka pembuatan objek akan berlangsung dalam skema default sesi saat ini. Jika skema tidak dapat ditentukan apakah default atau eksplisit, maka pernyataan DDL akan memunculkan kesalahan berikut: 

```
"Babelfish Unsupported Command : Schema required for CREATE DDLs when connecting with Active Directory Group authentication. Assign default schema to group user or specify schema in command."
```

**Example : Skema default tidak ada untuk pengguna grup Windows**  
Pengguna grup Windows [corp\$1 accounts-group] memiliki skema default NULL dan pengguna AD1 mencoba melakukan DDL tanpa menentukan skema secara eksplisit. Karena login windows individu dan pengguna tidak ada untuk user1, itu akan mendapatkan hak istimewa tingkat database pengguna grup Windows [corp\$1 accounts-group] saja.  

```
1> create TABLE t2(a int);
2> GO

Msg 33557097, Level 16, State 1, Server db-inst, Line 1
Babelfish Unsupported Command : Schema required for CREATE DDLs when connecting with Active Directory Group authentication. Assign default schema to group user or specify schema in command.
```
Login dan pengguna windows individual tidak ada untuk pengguna pengguna AD1

**Example : Skema default ada untuk pengguna grup Windows**  
Buat pengguna grup Windows untuk login [corp\$1 accounts-group] dengan skema default menggunakan sysadmin.   

```
1> CREATE USER [corp\accounts-group] FOR LOGIN [corp\accounts-group] WITH DEFAULT_SCHEMA = sch_acc;
2> GO
1> CREATE SCHEMA sch_acc AUTHORIZATION [gad\accounts-group];
2> GO
1> SELECT name, principal_id, default_schema_name FROM sys.database_principals WHERE name = 'corp\accounts-group';
2> GO
                
name               principal_id default_schema_name
------------------ ------------ -------------------
corp\accounts-group 24162        sch_acc

(1 rows affected)
```
 Coba buat objek tanpa menentukan skema secara eksplisit menggunakan pengguna AD user1. Tabel t2 akan dibuat dalam skema default [corp\$1 accounts-group] Pengguna grup Windows Pemilik objek ini akan sama dengan pemilik skema sch\$1acc.   

```
1> CREATE TABLE t_group(a int);
2> GO
1> SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't_group';
2> GO

name    schema_name
------- -----------
t_group sch_acc

(1 rows affected)
```
Login dan pengguna windows individual tidak ada untuk pengguna pengguna AD1

**Example : Pengguna database individu juga ada untuk pengguna AD**  
 Jika pengguna database individu juga ada untuk pengguna AD maka objek akan selalu dibuat dalam skema yang terkait dengan pengguna database individu. Jika skema tidak ada untuk pengguna database maka skema dbo akan digunakan. Buat login windows individual dan pengguna database untuk pengguna pengguna AD1. Connect melalui endpoint TDS menggunakan login sysadmin   

```
1> CREATE LOGIN [corp\user1] FROM WINDOWS;
2> GO
1> CREATE USER [corp\user1] FOR LOGIN [corp\user1] WITH DEFAULT_SCHEMA = sch1;
2> GO
1> CREATE SCHEMA sch1 AUTHORIZATION [corp\user1];
2> GO
1> SELECT name, default_schema_name FROM sys.database_principals WHERE name = 'corp\user1';
2> GO

name      default_schema_name
--------- -------------------
corp\user1 sch1

(1 rows affected)
```
 Connect menggunakan pengguna AD user1 dan coba buat objek tanpa menentukan skema secara eksplisit. Tabel t2 akan dibuat dalam skema sch1. Perhatikan juga bahwa pemilik objek ini akan sama dengan pemilik skema sch1.   

```
1> CREATE TABLE t2(a int);
2> GO
1> SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't2';
2> GO
            
name schema_name
---- -----------
t2   sch1

(1 rows affected)
```

# Batasan
<a name="babelfish-kerberos-securityad-limitations"></a>
+ Utilitas Dump/Restore tidak mendukung dumping pemetaan ekstensi pg\$1ad\$1mapping. Anda perlu membuat ulang pemetaan tersebut setelah pemulihan.
+ Penerapan Biru-Hijau tidak didukung untuk instance Babelfish dan Aurora Postgre dengan. SQL `pg_ad_mapping`
+ Pembuatan skema implisit tidak didukung. DDLpernyataan yang membutuhkan pembuatan skema implisit tidak didukung. 
+ DDLsALTERAUTHORIZATIONON tingkat serverDATABASE,,, CREATE DATABASE CREATE LOGIN ALTER LOGIN ALTER SERVERROLE, tidak ALTER DATABASE didukung dalam sesi otentikasi Grup AD ketika login Windows individu tidak ada, hanya login Windows grup yang ada. Untuk mengatasi batasan ini, Disarankan untuk melakukan operasi ini dalam sesi otentikasi kata sandi atau membuat login Windows individual.
+ Pembuatan pengguna implisit tidak didukung. SQLPerilaku T yang ideal [belum didukung di Babelfish]; Dalam beberapa kasus seperti DDL dan pernyataan kontrol akses GRANT seperti/ REVOKE di mana nama pengguna AD ditentukan dalam perintah tetapi tidak ada dalam database maka pengguna database bernama sebagai pengguna AD dibuat secara implisit.
+ Untuk DDLs dalam SQL Prosedur atau Fungsi PL/PG yang dibuat dari PSQL titik akhir dan dieksekusi dari titik akhir di sesi TDS otentikasi Grup AD:
  + ALTER/DROPpernyataan akan didukung.
  + CREATETABLE, CREATEVIEW, CREATEINDEX, CREATEFUNCTION/PROC, CREATETYPE, CREATESEQUENCE, CREATETRIGGER, SELECTINTO, CREATE FULLTEXTINDEX, CREATE UNIQUE INDEX akan menimbulkan kesalahan jika skema tidak disediakan secara eksplisit dan skema default adalah nol untuk sesi saat ini.
  + CREATEDATABASE, CREATE EXTENSION dan semua CREATE pernyataan lain untuk PG (bukan dalam T-SQL) objek tertentu CREATE langganan, CREATE tablespace, CREATE kebijakan, CREATE konversi tidak akan didukung.
+ DDLsdari SQL titik akhir Postgre tidak didukung dalam sesi yang diautentikasi Grup AD. Sebagai solusinya, Anda selalu dapat terhubung menggunakan pengguna master atau pengguna lain menggunakan mekanisme otentikasi berbasis kata sandi.
+ Objek sistem seperti SUSER \$1 SID (), IS\$1 (), IS\$1 SRVROLEMEMBER MEMBER (), sys.dm\$1exec\$1sessions memiliki batasan berikut.
  + SUSER\$1 SID () tidak akan mengembalikan SID kapan Pengguna AD atau Grup Keamanan AD disediakan.
  + IS\$1 SRVROLEMEMBER () tidak akan mempertimbangkan keanggotaan peran jika pengguna AD saat ini mewarisi keanggotaan peran server dari keanggotaan peran server login grup Windows apa pun.
  + IS\$1 MEMBER () akan mengembalikan false untuk kueri terkait Grup Windows apa pun.
  + sys.dm\$1exec\$1sessions tidak akan menampilkan nilai yang diharapkan login\$1name, kolom nt\$1user\$1name.

# Menghubungkan ke Babelfish melalui titik akhir PostgreSQL pada port PostgreSQL
<a name="babelfish-kerberos-securityad-connect-pgendpoint"></a>

Anda dapat menggunakan login grup yang dibuat dari port TDS untuk terhubung melalui port PostgreSQL juga. Untuk terhubung melalui port PostgreSQL, Anda perlu menentukan nama pengguna AD dalam format `<ad_username@FQDN>` dari aplikasi klien PostgreSQL. Anda tidak dapat menggunakan `<DNS domain name\ad_username>` format.

PostgreSQL menggunakan perbandingan case-sensitive secara default untuk nama pengguna. Agar Aurora PostgreSQL menafsirkan nama pengguna Kerberos sebagai case-insensitive, Anda harus menyetel parameter krb\$1caseins\$1users sebagai true di grup parameter cluster Babelfish kustom. Parameter ini diatur ke false secara default. Untuk informasi selengkapnya, lihat [Mengonfigurasi klaster DB Aurora PostgreSQL Anda untuk nama pengguna yang tidak peka huruf besar/kecil](postgresql-kerberos-setting-up.md#postgresql-kerberos-setting-up.create-logins.set-case-insentive). 

## Perbedaan perilaku antara titik akhir T-SQL dan PostgreSQL saat pengguna AD merupakan bagian dari beberapa grup
<a name="babelfish-kerberos-securityad-diff-tsql-pg"></a>

Pertimbangkan bahwa pengguna AD user1 adalah bagian dari dua grup keamanan AD [corp\$1 accounts-group] dan [corp\$1 sales-group] dan admin DB telah mengatur pemetaan pengguna dengan cara berikut.

```
postgres=> select * from pgadmap_read_mapping();
            
ad_sid       | pg_role                         | weight | ad_grp 
-------------+---------------------------------+--------+---------------
S-1-5-67-980 | accounts-group@CORP.EXAMPLE.COM | 7      | accounts-group
S-1-2-34-560 | sales-group@CORP.EXAMPLE.COM    | 10     | sales-group
(2 rows)
```

Jika pengguna terhubung dari titik akhir T-SQL maka selama otorisasi, itu akan mewarisi hak istimewa dari semua login T-SQL terkait. Dalam contoh ini user1 akan mewarisi gabungan hak istimewa dari login grup T-SQL dan bobot akan diabaikan. Ini sejalan dengan perilaku T-SQL standar. 

Namun jika pengguna yang sama terhubung dari titik akhir PostgreSQL maka ia dapat mewarisi hak istimewa hanya dari satu login T-SQL terkait dengan bobot tertinggi. Jika dua login grup T-SQL diberi bobot yang sama maka pengguna AD akan mewarisi hak istimewa login T-SQL yang sesuai dengan pemetaan yang ditambahkan baru-baru ini. Untuk PostgreSQL, rekomendasinya adalah menentukan bobot yang mencerminkan permissions/privileges relatif peran DB individu untuk menghindari ambiguitas. Dalam contoh di bawah ini, user1 terhubung melalui titik akhir PSQL dan hanya mewarisi hak istimewa grup penjualan.

```
babelfish_db=> select session_user, current_user;

   session_user               |   current_user
------------------------------+---------------------------
 sales-group@CORP.EXAMPLE.COM | sales-group@CORP.EXAMPLE.COM
(1 row)


babelfish_db=> select principal, gss_authenticated from pg_stat_gssapi where pid = pg_backend_pid();

     principal          | gss_authenticated
------------------------+-------------------
 user1@CORP.EXAMPLE.COM | t
(1 row)
```