如何授予使用者權限以在自定義架構中創建儲存過程
我正在嘗試授予 SQL Server 登錄權限以創建儲存過程並將它們綁定到自定義架構。在這種情況下,我創建了一個名為
IC
. 然後將具有儲存過程執行權限的服務帳戶添加到架構中。我的問題是:如何授予此 SQL Server 登錄權限以創建綁定到 IC 的新儲存過程?
我試過
GRANT CREATE ON SCHEMA::IC TO [username];
但只得到
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'CREATE'.
有什麼建議麼?
您不能通過僅授予對模式的權限來將創建過程的能力更改為僅一種模式。(假設使用者沒有其他權限。)
為什麼?
使用者仍然需要在數據庫中創建對象的權限,在這種情況下是過程。
您可以做的是授予使用者
CREATE PROCEDURE
權限,然後將架構的所有者更改為該使用者(更安全,請參閱下文了解更多資訊)或授予該使用者對 ‘IC’ 的權限SCHEMA
。僅授予
CREATE PROCEDURE
不允許使用者在 dbo 等模式上創建過程。創建登錄名、對應使用者和 IC 架構
USE [master] GO CREATE LOGIN [TestIC] WITH PASSWORD=N'Test', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF; GO USE [test] GO CREATE USER [TestIC] FOR LOGIN [TestIC]; GO CREATE SCHEMA IC;
授予使用者創建過程
GRANT CREATE PROCEDURE TO [TestIC];
更改架構的所有者(更安全的選項)
ALTER AUTHORIZATION ON SCHEMA::IC TO [TestIC];
或授予使用者訪問架構的權限
GRANT ALTER ON SCHEMA::IC TO [TestIC] ;
授予架構權限所涉及的風險
授予使用者更改另一個使用者架構的能力使該使用者能夠在該架構所有者擁有的任何表中選擇、插入、更新和刪除行。這稱為“所有權連結”,它使視圖和儲存過程成為控制安全性的真正簡單方法,因為對視圖或儲存過程具有權限的使用者不需要被授予對基礎表的權限,只要View/Proc 與 Table 具有相同的所有者。
查看@DavidBrowne-Microsoft 對引用來源的回答,並在授予更改架構權限時獲取有關“所有權連結”安全風險的更多資訊。
測試
EXECUTE AS LOGIN = 'TestIC'; CREATE PROCEDURE IC.test as select * from sys.databases;
結果:
命令成功完成。
這失敗了
CREATE PROCEDURE dbo.test as select * from sys.databases;
消息 2760,級別 16,狀態 1,程序測試,第 1 行
$$ Batch Start Line 35 $$指定的模式名稱“dbo”要麼不存在,要麼您沒有使用它的權限。
撤消模擬
REVERT;