

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Babelfish for Aurora PostgreSQL 中管理許可和存取控制
<a name="babelfish-permissions"></a>

 在 Babelfish for Aurora PostgreSQL 中，您可以管理資料庫、結構描述和物件的許可和存取控制。下表將概述特定 SQL 命令，這些命令適用於在 Babelfish 中授予許可以實現各種存取控制案例。其中涵蓋可實作的支援使用案例，以及目前不支援案例的解決方法。這可讓您在處理 Babelfish 資料庫時設定適當的許可，以符合安全和合規要求。

## 支援的使用案例
<a name="babelfish-permissions-supported"></a>

 下表說明 Babelfish 中支援的使用案例。對於每個使用案例，資料表會顯示實現該案例所需的動作和範例 SQL 命令。


|  使用案例  |  Action  |  SQL 命令  |  說明  |  Babelfish 版本相容性  | 
| --- | --- | --- | --- | --- | 
|   允許登入在任何資料庫中執行 SELECT/DML/DDL   |   將登入新增至 sysadmin 伺服器角色   |   ALTER SERVER ROLE sysadmin ADD MEMBER `login`   |   無   |   所有版本   | 
|   允許登入在資料庫中執行 SELECT/DML/DDL   |   讓登入成為資料庫擁有者   |   ALTER AUTHORIZATION ON DATABASE::`database` TO `login`   |   資料庫只能有一個擁有者。  |   3.4 版及更新版本   | 
|   允許資料庫使用者對結構描述執行 SELECT/DML   |   將許可授予結構描述上的資料庫使用者   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON SCHEMA::`schema` TO `user`   |   無   |   3.6 版及更新版本，4.2 版及更新版本   | 
|   允許資料庫使用者對結構描述執行 SELECT/DML   |   讓資料庫使用者在結構描述建立時成為結構描述擁有者   |   CREATE SCHEMA `schema` AUTHORIZATION `user`   |   目前不支援在建立後變更結構描述擁有權。  |   1.2 版及更新版本   | 
|   允許資料庫使用者對物件執行 SELECT/DML   |   將許可授予物件上的資料庫使用者   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON OBJECT::`object` TO `user`   |   無   |   所有版本   | 
|   允許資料庫使用者在資料庫 (包括捨棄資料庫) 中執行 SELECT/DML/DDL   |   將使用者新增至 db\$1owner 固定資料庫角色   |   ALTER ROLE db\$1owner ADD MEMBER `user`   |   只能夠將使用者新增至 db\$1owner 固定資料庫角色。尚不支援將角色新增至 db\$1owner 角色。  |   4.5 版及更新版本，5.1 版及更新版本   | 
|   允許自訂資料庫角色的使用者或成員只在資料庫中執行 SELECT   |   將使用者或角色新增至 db\$1datareader 固定資料庫角色   |   ALTER ROLE db\$1datareader ADD MEMBER `user` / `role`   |   無   |   4.5 版及更新版本，5.1 版及更新版本   | 
|   允許自訂資料庫角色的使用者或成員只在資料庫中執行 DML   |   將使用者或角色新增至 db\$1datawriter 固定資料庫角色   |   ALTER ROLE db\$1datawriter ADD MEMBER `user` / `role`   |   無   |   4.5 版及更新版本，5.1 版及更新版本   | 
|   允許自訂資料庫角色的使用者或成員只在資料庫中執行 DDL   |   將使用者或角色新增至 db\$1accessadmin 固定資料庫角色   |   ALTER ROLE db\$1accessadmin ADD MEMBER `user` / `role`   |   無   |   4.5 版及更新版本，5.1 版及更新版本   | 
|   允許自訂資料庫角色的使用者或成員僅使用 CREATE/ALTER/DROP 自訂角色、資料庫中物件的 GRANT/REVOKE 許可和/或資料庫中的 CREATE SCHEMA   |   將使用者或角色新增至 db\$1securityadmin 固定資料庫角色   |   ALTER ROLE db\$1securityadmin ADD MEMBER `user` / `role`   |   無   |   4.5 版及更新版本，5.1 版及更新版本   | 
|   允許自訂資料庫角色的使用者或成員僅對任何使用者進行 CREATE/ALTER/DROP、授予和撤銷資料庫存取權，以及將使用者帳戶對應至登入，和/或在資料庫中進行 CREATE SCHEMA   |   將使用者或角色新增至 db\$1accessadmin 固定資料庫角色   |   ALTER ROLE db\$1accessadmin ADD MEMBER `user` / `role`   |   無   |   4.5 版及更新版本，5.1 版及更新版本   | 
|   僅允許登入對任何資料庫進行 CREATE/DROP/ALTER   |   將登入新增至 dbcreator 固定伺服器角色   |   ALTER SERVER ROLE dbcreator ADD MEMBER `login`   |   只能夠變更 dbcreator 登入可以存取的那些資料庫。  |   4.5 版及更新版本，5.1 版及更新版本   | 
|   僅允許登入對任何登入進行 CREATE/ALTER/DROP   |   將登入新增至 securityadmin 固定伺服器角色   |   ALTER SERVER ROLE securityadmin ADD MEMBER `login`   |   無   |   4.5 版及更新版本，5.1 版及更新版本   | 

## 具有解決方法的不支援使用案例
<a name="babelfish-permissions-unsupported"></a>

 下表說明 Babelfish 中不支援，但可使用解決方法達成的使用案例。


|  使用案例  |  Action  |  SQL 命令  |  說明  |  Babelfish 版本的解決方法相容性  | 
| --- | --- | --- | --- | --- | 
|   允許使用者對物件/結構描述執行 SELECT/DML，以及將這些許可 GRANT 其他使用者的選項   |   直接將許可 GRANT 所有其他使用者   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON OBJECT/SCHEMA::`object`/`schema` TO `user`   |   GRANT ... 目前不支援 WITH GRANT OPTION。  |   3.6 版及更新版本，4.2 版及更新版本   | 
|   允許資料庫使用者在資料庫 (包括捨棄資料庫) 中執行 SELECT/DML/DDL   |   將角色成員新增至 db\$1owner 固定資料庫角色   |   ALTER ROLE db\$1owner ADD MEMBER `user`   |   目前不支援將角色新增至 db\$1owner 角色。  |   4.5 版及更新版本，5.1 版及更新版本   | 

## 不支援的使用案例
<a name="babelfish-permissions-unsupported"></a>

 下表說明 Babelfish 中不支援的使用案例。


|  使用案例  |  說明  | 
| --- | --- | 
|  拒絕自訂資料庫角色的使用者或成員在資料庫中執行 SELECT   |   尚不支援 db\$1denydatareader 固定資料庫角色   | 
|  拒絕自訂資料庫角色的使用者或成員在資料庫中執行 DML   |   目前不支援 db\$1denydatawriter 固定資料庫角色。  | 
|  允許登入，以僅對任何資料庫連線進行 KILL   |   目前不支援 processadmin 固定伺服器角色。  | 
|  允許登入，以僅新增或移除連結的伺服器   |   目前不支援 setupadmin 固定伺服器角色。  | 

# 在升級後解決物件擁有權差異
<a name="babelfish-ownership-differences"></a>

Babelfish 4.6 版和更新版本以及 5.2 版和更新版本，都包含透過 TDS 端點對物件擁有權處理所做的變更。當您透過 TDS 端點建立新物件時，這些物件現在由結構描述擁有者 (而不是目前使用者) 擁有。當您從較 4.6 或 5.2 更舊的版本升級時，相較於現有物件，此擁有權變更可能會影響新物件的許可行為。

為了解決這些擁有權差異，Babelfish 提供 `sys.generate_alter_ownership_statements()` 函數。此函數會產生 SQL 陳述式，使物件擁有權與結構描述擁有權保持一致。

處理物件擁有權時，請注意下列限制：
+ 透過 PostgreSQL 端點獲授予 CREATE 許可的使用者無法透過那些結構描述中的 TDS 端點建立物件。
+ 不建議透過 PostgreSQL 端點修改對 T-SQL 物件的許可，這可能會導致不正確的 T-SQL 行為。
+ 新舊物件的存取許可可能有所不同，因為其擁有權不相符。例如，請考慮 `sch_own` 擁有的結構描述，其中包含 `dbo` 擁有的物件。在這種情況下，與升級之後建立的物件 (`sch_own` 擁有) 相比，升級之前建立的物件 (`dbo` 擁有) 可能具有不同的存取許可。這可能會影響 SELECT 和 INSERT 等操作。

如果資料庫叢集包含在較 4.6 或 5.2 更舊的 Babelfish 版本中建立的物件，請考慮調整其擁有權。

**解決物件擁有權差異**

1. 使用 PostgreSQL 端點連線至資料庫叢集中的 `babelfish_db` 資料庫。

1. 執行以下命令：

   ```
   SELECT * from sys.generate_alter_ownership_statements();
   ```

   這會產生 SQL 陳述式清單，這些陳述式是為了標準化物件之間的擁有權。

1. 在測試環境執行產生的陳述式，先驗證其效果，再套用到生產環境。

我們建議您執行這些陳述式，以在資料庫中實現一致的物件擁有權模型。