星期四, 9月 16, 2021

[SQL] Alter 權限

網路問題,拿來複習權限設定相關操作,問題為 
 只開特定 Table 的 Alter 權限給指定使用者?
USE AdventureWorks2017
GO

-- 刪除 Table、User 和 Login,方便重覆執行
DROP TABLE IF EXISTS tblDemo
DROP USER IF EXISTS UserOnlyAlert
IF EXISTS ( SELECT 1 FROM  sys.sql_logins WHERE Name = 'LoginOnlyAlert' ) DROP LOGIN LoginOnlyAlert

-- 建立一個簡單 Table 來驗證,是否具備只有 Alter 權限
CREATE TABLE [dbo].[tblDemo](
   [ID] [int] NULL
) ON [PRIMARY]
GO

-- 建立 Login
CREATE LOGIN [LoginOnlyAlert] 
  WITH PASSWORD = N'P@ssw0rd', 
  DEFAULT_DATABASE = [AdventureWorks2017], 
  DEFAULT_LANGUAGE = [繁體中文], 
  CHECK_EXPIRATION = OFF, 
  CHECK_POLICY = OFF
GO

-- 建立 User 並指定預設 Schema
CREATE USER [UserOnlyAlert] FOR LOGIN [LoginOnlyAlert] WITH DEFAULT_SCHEMA = [dbo]
GO

-- 授給 UserOnlyAlert 對 tblDemo 進行 Alter 的權限
GRANT ALTER
ON AdventureWorks2017.dbo.tblDemo
TO [UserOnlyAlert]

-- 確認目前的 Login 和 User:
-- SUSER_SNAME():TP-JENGTING\jengting
-- USER_NAME()  :dbo
SELECT 
  SUSER_SNAME() , -- Instance Level
  USER_NAME()     -- DB Level

-- 切換 Login
EXECUTE AS LOGIN  = 'LoginOnlyAlert'

-- 確認目前的 Login 和 User:
-- SUSER_SNAME():LoginOnlyAlert
-- USER_NAME()  :UserOnlyAlert
SELECT 
  SUSER_SNAME() , -- Instance Level
  USER_NAME()     -- DB Level

-- 權限測試
-- 對 Demo Table 進行 Select、Insert、Update 和 Delete
SELECT * FROM [AdventureWorks2017].[dbo].[tblDemo]
ALTER TABLE tblDemo ADD ColName char(10) 

-- 測試訊息
-- 訊息 229,層級 14,狀態 5,行 52
-- 結構描述 'dbo',資料庫 'AdventureWorks2017',物件 'tblDemo' 沒有 SELECT 權限。

REVERT
新增欄位結果
[SQL] Alter 權限


沒有留言:

張貼留言