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表的欄位都是使用者有權限存取的。
留言
張貼留言