2015-02-12 62 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

相关问题