本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
根據預設或明確結構描述處理 DDL 陳述式行為
使用 AD 驗證工作階段時,目前工作階段的預設結構描述取決於下列條件:
-
如果存在個別資料庫使用者,會將使用者的預設結構描述視為目前工作階段的預設結構描述。
-
如果群組資料庫使用者的預設結構描述存在,則會將群組資料庫使用者的預設結構描述視為具有最小主體 ID 的目前工作階段預設結構描述。
了解 CREATE DDL 陳述式行為
如果 CREATE DDL 陳述式中未指定明確的結構描述,則會在目前工作階段的預設結構描述中建立物件。如果無法判斷結構描述是預設還是明確,則 DDL 陳述式會擲出下列錯誤:
"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."
範例:Windows 群組使用者的預設結構描述不存在
Windows 群組使用者 [corp\accounts-group] 具有 NULL 預設結構描述,而 AD 使用者 user1 正嘗試執行 DDL,而不明確指定結構描述。由於 user1 不存在個別 Windows 登入和使用者,因此只會取得 Windows 群組使用者 [corp\accounts-group] 的資料庫層級權限。
1>create TABLE t2(a int);2>GOMsg 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.
注意
AD 使用者 user1 的個別 Windows 登入和使用者不存在
範例:Windows 群組使用者存在預設結構描述
使用 sysadmin 以預設結構描述建立 [corp\accounts-group] 登入的 Windows 群組使用者。
1>CREATE USER [corp\accounts-group] FOR LOGIN [corp\accounts-group] WITH DEFAULT_SCHEMA = sch_acc;2>GO1>CREATE SCHEMA sch_acc AUTHORIZATION [gad\accounts-group];2>GO1>SELECT name, principal_id, default_schema_name FROM sys.database_principals WHERE name = 'corp\accounts-group';2>GOname principal_id default_schema_name ------------------ ------------ ------------------- corp\accounts-group 24162 sch_acc (1 rows affected)
嘗試建立物件,而不使用 AD 使用者 user1 明確指定結構描述。系統將在 [corp\accounts-group] Windows 群組的預設結構描述中建立資料表 t2。此物件的擁有者將與結構描述 sch_acc 的擁有者相同。
1>CREATE TABLE t_group(a int);2>GO1>SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't_group';2>GOname schema_name ------- ----------- t_group sch_acc (1 rows affected)
注意
AD 使用者 user1 的個別 Windows 登入和使用者不存在
範例:AD 使用者的個別資料庫使用者也存在
如果 AD 使用者的個別資料庫使用者也存在,則一律會在與個別資料庫使用者相關聯的結構描述中建立物件。如果資料庫使用者不存在結構描述,則會使用 dbo 結構描述。為 AD 使用者 user1 建立個別 Windows 登入和資料庫使用者。使用 sysadmin 登入透過 TDS 端點進行連線
1>CREATE LOGIN [corp\user1] FROM WINDOWS;2>GO1>CREATE USER [corp\user1] FOR LOGIN [corp\user1] WITH DEFAULT_SCHEMA = sch1;2>GO1>CREATE SCHEMA sch1 AUTHORIZATION [corp\user1];2>GO1>SELECT name, default_schema_name FROM sys.database_principals WHERE name = 'corp\user1';2>GOname default_schema_name --------- ------------------- corp\user1 sch1 (1 rows affected)
使用 AD 使用者 user1 進行連線,並嘗試建立物件,而不明確指定結構描述。將在結構描述 sch1 中建立資料表 t2。另請注意,此物件的擁有者將與結構描述 sch1 的擁有者相同。
1>CREATE TABLE t2(a int);2>GO1>SELECT name, schema_name(schema_id) FROM sys.objects WHERE name like 't2';2>GOname schema_name ---- ----------- t2 sch1 (1 rows affected)