2015-02-12 45 views
-1

我有一個數據庫並創建登錄名和用戶, 此用戶無法看到任何內容。爲用戶創建權限只能看到一個視圖

grant select on GuestView to PublicLogin 

該用戶後看到這一觀點 但用戶可以選擇任何

我的問題

爲什麼我可以鎖定用戶做任何選擇插入/更新? 我試過這個 它沒有工作。

SELECT 'REVOKE SELECT ON ' + quotename('dbo') + '.' + quotename('AccessCheckpoint') + ' TO PublicLogin' FROM INFORMATION_SCHEMA.TABLES 

SELECT 'REVOKE UPDATE ON ' + quotename('dbo') + '.' + quotename('AccessCheckpoint') + ' TO PublicLogin' FROM INFORMATION_SCHEMA.TABLES 

SELECT 'REVOKE INSERT ON ' + quotename('dbo') + '.' + quotename('AccessCheckpoint') + ' TO PublicLogin' FROM INFORMATION_SCHEMA.TABLES 

SELECT 'REVOKE DELETE ON ' + quotename('dbo') + '.' + quotename('AccessCheckpoint') + ' TO PublicLogin' FROM INFORMATION_SCHEMA.TABLES 

SELECT 'REVOKE EXECUTE ON ' + quotename('dbo') + '.' + quotename('AccessCheckpoint') + ' TO PublicLogin' FROM INFORMATION_SCHEMA.TABLES 

但再次選擇工作正常

select *from AccessCheckpoint 
+0

在你的問題部分是'Can'還是'Can not'? – Avidan 2015-02-12 07:45:31

+0

我想鎖,,, db必須關閉這個用戶,,,, 他只能從一個視圖中選擇 – 2015-02-12 07:53:15

+0

你想公共登錄只能訪問從GuestView讀取,沒有別的。對? – sv88erik 2015-02-12 07:55:01

回答

1
DECLARE @TableUsedInView NVARCHAR(100) 
DECLARE @TableUsedInView2 NVARCHAR(100) 
SET @TableUsedInView='PulibcTable1' 
SET @TableUsedInView2='PulibcTable2' 

SELECT 'REVOKE SELECT ON ' + quotename(table_schema) + '.' + quotename(table_name) + ' TO PublicLogin' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE table_name NOT IN(@TableUsedInView,@TableUsedInView2) 


SELECT 'REVOKE UPDATE ON ' + quotename(table_schema) + '.' + quotename(table_name) + ' TO PublicLogin' 
FROM INFORMATION_SCHEMA.TABLES 


SELECT 'REVOKE DELETE ON ' + quotename(table_schema) + '.' + quotename(table_name) + ' TO PublicLogin' 
FROM INFORMATION_SCHEMA.TABLES 



SELECT 'REVOKE INSERT ON ' + quotename(table_schema) + '.' + quotename(table_name) + ' TO PublicLogin' 
FROM INFORMATION_SCHEMA.TABLES 


SELECT 'REVOKE EXECUTE ON ' + quotename(routine_schema) + '.' + quotename(routine_name) + ' TO PublicLogin' 
FROM INFORMATION_SCHEMA.ROUTINES 

SELECT 'GRANT SELECT ON GuestView to PublicLogin' 
SELECT 'GRANT SELECT ON ' + @TableUsedInView + ' TO PublicLogin' 
SELECT 'GRANT SELECT ON ' + @TableUsedInView2 + ' TO PublicLogin' 

複製這些結果,並將其粘貼到一個新的查詢窗口,並運行它們。您應該檢查輸出以確保只包含您需要的視圖和過程。

UPDATE:

這是爲了確保該用戶沒有任何權限,從之前的表。如果你這樣做,因爲我寫了上面,你可以創建在客戶視圖以下查詢:

SELECT *  
    FROM PulibcTable1 AS P 
    INNER JOIN PulibcTable2 AS P2 ON P.UserID=P2.UserID 

但公衆登錄將不能,如果你有這樣的觀點得到行:

SELECT *  
    FROM InternTable 

這是因爲他只能從2個表中讀取

+0

我會爲此做所有的表? 並在此後---------- 選擇'授予選擇開'+ TableUsedInView +'公共登錄' 選擇'授予選擇開'+ TableUsedInView2 +'TO -------- ---- PublicLogin' 他再次可以從這2個表中選擇? – 2015-02-12 08:42:39

+0

請參閱更新:)另外請確保沒有PublicLogin成員的任何SQL角色給予他訪問權限。 https://msdn.microsoft.com/en-us/library/ms189121.aspx和https://msdn.microsoft.com/en-us/library/ms188659.aspx – sv88erik 2015-02-12 08:57:47

+0

謝謝,我現在就試試吧 – 2015-02-12 09:01:19

相關問題