SQL Server授予了CREATE TABLE權限但是無法創建表淺析


在SQL Server中,如果我想授予一個用戶klb擁有創建表的權限,但是我又不想授予其數據庫角色db_ddladmin,因為這樣會擴大其權限,那么授予下面權限可行嗎?如下所示: 

USE AdventureWorks2014;
GO
GRANT CREATE TABLE TO  klb;

 

那么這樣授權是否就OK呢?答案是這樣授權會報錯The specified schema name "dbo" either does not exist or you do not have permission to use it.

 

clip_image001

 

需要授予下面權限,登錄名klb才能真正的創建表。

 

USE AdventureWorks2014;
GO
GRANT ALTER ON SCHEMA::dbo TO klb

 

但是這樣又會擴大登錄名klb的權限(繞了一圈,又重回老路)。其實,SQL Server中如果新建一個用戶模式(user-schema)的話,那么就可以解決這個問題。

 

CREATE SCHEMA test AUTHORIZATION klb

 

如果已經存在對應的用戶模式

 

USE AdventureWorks2014;

GO

GRANT ALTER ON SCHEMA::test TO klb

 

按上面這樣授權后,那么對比下面腳本,你就會發現klb可以在test這個模式下創建表,但是不能在dbo這個模式下創建表。其實這個也是SQL Server 用戶模式分離設計的原因。

 

CREATE TABLE dbo.TEST (id INT); --報錯
GO
CREATE TABLE test.TEST (id INT);--正常
GO


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM