T-SQL筆記44_Grant權限_part1_View使用table不用直接給予存取權限



在SQL Server中,使用GRANT語句可以授予用戶或角色對數據庫對象(如表、視圖、存儲過程等)的權限。
以下是幾個基本的GRANT示例:

授予SELECT權限給用戶:
GRANT SELECT ON table_name TO user_name;
將SELECT權限授予給指定的用戶(user_name)對指定的表(table_name)。

授予INSERT、UPDATE和DELETE權限給角色:
GRANT INSERT, UPDATE, DELETE ON table_name TO role_name;
將INSERT、UPDATE和DELETE權限授予給指定的角色(role_name)對指定的表(table_name)。
授予EXECUTE權限給用戶或角色:
GRANT EXECUTE ON stored_procedure_name TO user_or_role_name;
將EXECUTE權限授予給指定的用戶或角色(user_or_role_name)對指定的存儲過程(stored_procedure_name)。

授予CONTROL權限給用戶或角色:
GRANT CONTROL ON table_name TO user_or_role_name;

將CONTROL權限授予給指定的用戶或角色(user_or_role_name)對指定的表(table_name),該權限允許用戶或角色對對象進行任何操作,包括更改權限、刪除對象等。


SQL Server中某登入帳號若沒有A表任何存去權限,但是有存取A表的View有權限是否可正常存取此View? Ans:Yes 

假設有一個登入帳號TestUser,沒有A表的存取權限,但是有存取A表的View的權限
創建A表和A表的View

CREATE TABLE A (
    ID INT PRIMARY KEY,
    Name VARCHAR(50)
);

INSERT INTO A VALUES (1, 'John');
INSERT INTO A VALUES (2, 'Mary');
INSERT INTO A VALUES (3, 'Tom');

CREATE VIEW A_View AS
SELECT * FROM A;


創建一個新的登入帳號TestUser,並授予對A_View的SELECT權限

CREATE LOGIN TestUser WITH PASSWORD = 'TestPassword';
CREATE USER TestUser FOR LOGIN TestUser;
GRANT SELECT ON A_View TO TestUser;

使用TestUser登入SQL Server,嘗試存取A_View

-- 使用TestUser登入SQL Server
EXECUTE AS LOGIN = 'TestUser';

-- 嘗試存取A_View
SELECT * FROM A_View;

使用TestUser登入SQL Server,並使用EXECUTE AS語句指定執行上下文,然後嘗試存取A_View。由於TestUser沒有對A表的存取權限,但是有對A_View的SELECT權限,因此可以正常存取A_View,並查詢到A表中的資料。

需要注意的是,如果A_View中包含了沒有存取權限的A表的欄位,則在查詢A_View時會收到權限不足的錯誤提示。因此,在創建A_View時需要確保A_View所涉及的A表的欄位都是使用者有權限存取的。

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題