Sql-Server
為特定架構中的使用者創建表權限
我想在數據庫的 schema1 上向使用者 A 授予 Create 、 alter 和 drop 權限。我想這個問題已經被問到了,我發現將 Alter 授予模式並將 create table 授予使用者 A:
GRANT ALTER, DELETE, EXECUTE, INSERT, SELECT, UPDATE ON SCHEMA::schema1 TO user A;
GRANT CREATE TABLE TO User A;
如果這是正確的,那麼 userA 是否也可以在其他模式上創建表?
我想在數據庫的 schema1 上向使用者 A 授予 Create 、 alter 和 drop 權限
執行此操作的安全方法是讓 A 成為該架構的所有者。
授予使用者更改另一個使用者架構的能力使該使用者能夠在該架構所有者擁有的任何表中選擇、插入、更新和刪除行。這稱為“所有權連結”,它使視圖和儲存過程成為控制安全性的真正簡單方法,因為對視圖或儲存過程具有權限的使用者不需要被授予對基礎表的權限,只要View/Proc 與 Table 具有相同的所有者。
但是,在這種情況下,您可以使用所有權鏈輕鬆創建安全漏洞。通常,您永遠不希望使用者能夠創建將由不同(尤其是特權)使用者擁有的對象。
例如,僅授予 CREATE TABLE、ALTER 和 INSERT 會創建一個安全漏洞:
use master --drop database security_test go create database security_test go use security_test go create schema schema1 authorization dbo go create user A without login go grant create table to A grant alter, insert on schema::schema1 to A go create table dbo.secret(id int, msg varchar(200)) insert into dbo.secret(id,msg) values (1, 'secret data') go execute as user='A' create table schema1.foo(id int) go create trigger t on schema1.foo after insert as begin select * from dbo.secret end go insert into schema1.foo(id) values (1) go revert
輸出
id msg ----------- ----- 1 secret data
是的,您需要在數據庫級別授予創建表權限。例如,如果使用者被授予創建表所需的權限,但沒有在特定模式中執行此操作所需的權限,則他們無法在此處創建表。