2017-03-17 69 views
1

是否可以在某些情况下授予sql表的select权限。带条件的sql select权限

例如grant select where table.id = < 50

补充:我说的是MS SQL

+1

根据ANSI SQL它不是。用'where table.id = <50'和grant select来创建一个视图。 – jarlh

回答

1

它直接是不可能的。

虽然要完成此任务,您可以先创建一个具有所需条件的视图,然后为该特定视图授予选择权限。

有关详细信息: mysql GRANT + WHERE

0

阿尔山,你还没谈到数据库引擎(使用的是哪一个:甲骨文/ MS SQL服务器/ MySQL的等)的任何东西。

在Oracle中,例如,您正在授予/撤销特定对象的权限,并且无法限制输出结果(使用开箱即用的GRANT语句)。

在SQL Server中,你能够授予个人用户的行级权限的一些额外的工作:https://msdn.microsoft.com/en-us/library/bb669076(v=vs.110).aspx

例子:

CREATE SCHEMA Security 
GO 

CREATE FUNCTION Security.userAccessPredicate(@UserName sysname) 
    RETURNS TABLE 
    WITH SCHEMABINDING 
AS 
    RETURN SELECT 1 AS accessResult 
    WHERE @UserName = SUSER_SNAME() 
GO 

CREATE SECURITY POLICY Security.userAccessPolicy 
    ADD FILTER PREDICATE Security.userAccessPredicate(UserName) ON dbo.MyTable, 
    ADD BLOCK PREDICATE Security.userAccessPredicate(UserName) ON dbo.MyTable 
GO 
    enter code here 

CREATE VIEW vw_MyTable 
AS 
    RETURN SELECT * FROM MyTable 
    WHERE UserName = SUSER_SNAME() 
GO 

一般从概念角度来看,如果要限制用户对于只有一定数量的行,您应该执行以下操作: 基本方法是:

  1. 防止用户(或组)来回m访问基表。
  2. 在表格顶部定义一个只显示这些用户应该看到的行的视图。
  3. 为用户提供对视图的SELECT权限。