Sql-Server

為什麼我不能創建所有者設置為 dbo 的新架構?

  • November 17, 2019

我創建了一個測試帳戶來檢查權限。它目前具有 Northwind 數據庫的 db_datareader、db_datawriter 和 db_ddladmin 角色。但是當它嘗試在 Northwind 上創建新架構時,如果它嘗試將 dbo 授權為架構所有者,則創建失敗,這是怎麼回事?

創建架構失敗

Version: 
SQL Server Management Studio: 15.0.18183.0 
Microsoft Analysis Services Client Tools: 15.0.1487.0 
Microsoft Data Access Components (MDAC): 10.0.18362.1 
Microsoft MSXML: 3.0 6.0 
Microsoft Internet Explorer: 9.11.18362.0 Microsoft 
.NET Framework: 4.0.30319.42000 
Operating System: 10.0.18362

db_datareader、db_datawriter 和 db_ddladmin 權限不會為此操作提供必要的權限。

db_datareader: db_datareader 固定數據庫角色的成員可以讀取所有使用者表中的所有數據。

db_datawriter: db_datawriter 固定數據庫角色的成員可以添加、刪除或更改所有使用者表中的數據。

db_ddladmin: db_ddladmin 固定數據庫角色的成員可以在數據庫中執行任何數據定義語言 (DDL) 命令。

如您所見,這些權限將賦予您創建和操作某些數據庫結構的權限。但是,它們不會授予您更改其他使用者或創建模式的權限

檢查來自Microsoft的數據庫級別角色和權限的 圖像在此處輸入圖像描述

請注意,db_ddladmin權限不會授予您創建 SCHEMA 的權限。為此,您需要將您的測試使用者設置為db_accessadmin的成員。此角色將授予創建模式更改任何使用者的權限。將dbo 使用者設置為模式所有者需要更改任何使用者權限:

USE [your_database]
GO
ALTER ROLE [db_accessadmin] ADD MEMBER [teste]
GO

在此之後,您將可以在新架構中授權 DBO,例如:

USE [your_database]
GO
CREATE SCHEMA [test] AUTHORIZATION [dbo]
GO

另一個角色將授予執行此操作的權限是 db_owner,但是對此具有“一些強大的”權限。這就是為什麼正確的角色是 db_accessadmin。您可以在此連結上閱讀有關每個權限的更多資訊

請記住在正確的數據庫中使用以下命令:

USE [your_database]

引用自:https://dba.stackexchange.com/questions/252376