2012-08-06 26 views
1

我們有大約50個表,並且我們需要拒絕對每個表的寫入權限,除了特定用戶的一個表以外。如何拒絕向所有表中的用戶寫入預留

我們該怎麼做?

+2

你嘗試過這麼遠嗎?你是否嘗試完成你所描述的內容,拒絕寫入49個表並授予1? – 2012-08-06 13:05:01

回答

3

以下是使用動態SQL進行處理的一種方法。由於Management Studio中的輸出限制,Print可能不會顯示整個命令。你需要更新用戶名和例外。

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N''; 

SELECT @sql = @sql + ' 
    DENY UPDATE, DELETE, INSERT ON ' + 
    QUOTENAME(SCHEMA_NAME([schema_id])) + '.' 
    + QUOTENAME(name) + ' TO [username];' -- fix this username 
FROM sys.tables 
WHERE name <> 'exception'; -- fix this to be the one you want to allow 

PRINT @sql; 
-- EXEC sp_executesql @sql; 
0

在SQL Server Management Studio中:

轉到屬性頁的用戶,那麼用戶映射選項卡。

Tick public和db_datareader(不要打勾db_denydatawriter)適當的數據庫。

這隻會授予他們讀取權限。

然後你就可以授予插入和更新使用一個類似的查詢的用戶表:

GRANT INSERT ON OBJECT::dbo.MyTable TO Fred 
GRANT UPDATE ON OBJECT::dbo.MyTable TO Fred 
相關問題