2017-03-17 73 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權限。