SQL Server 關於列的許可權控制

2021-09-07 23:45:44 字數 2569 閱讀 8632

在sql server中列許可權(column permissions)其實真沒有什麼好說的,但是好多人對這個都不甚了解,已經被人問了幾次了,所以還是在這裡介紹一下,很多人都會問,我能否單獨對錶的某列授權給某個使用者? 答案是可以,我們可以對錶中的列授予select、update許可權,我們結合下面的簡單案例來闡述一下可能效果更好。

案例1: 在adventureworks2014中,登入名usera 只能有許可權查詢[person].[person]裡面的businessentityid, nationalidnumber, loginid三個字段許可權,不能查詢其它字段

go
create login [usera] with password=n'usera', default_database=[master], check_expiration=off, check_policy=off
go
use [adventureworks2014]
go
create

user [usera] for login [usera]

go

給使用者授予相關列的查詢許可權(select)

grant

select(businessentityid, nationalidnumber, loginid) on  [humanresources].[employee] to [usera]

此時你可以用下面sql檢視授予usera的許可權:

select  dp.grantee_principal_id ,
p.name as uname ,
dp.permission_name ,
c.name ,
object_name(o.object_id) as tabname
from    sys.database_permissions dp
inner

join sys.objects o on dp.major_id = o.object_id

inner

join sys.columns c on c.object_id = o.object_id

and c.column_id = dp.minor_id
inner

join sys.database_principals p on p.principal_id = dp.grantee_principal_id;

以使用者usera登入,如下所示,如果查詢語句使用businessentityid, nationalidnumber, loginid欄位之外的其它字段,就會出現類似下面錯誤,當然也不能使用select *之類的查詢語句。

msg 230, level 14, state 1, line 8

the select permission was denied on the column 'jobtitle' of the object 'employee', database 'adventureworks2014', schema 'humanresources'.

另外,也可以只授權使用者更新某個列,例如對於登入名userb,只允許其修改person.address的addressline1,addressline2兩個字段,其它字段不許修改。

grant

update(addressline1,addressline2) on [person].[address] to userb;

select  dp.grantee_principal_id ,
p.name as uname ,
dp.permission_name ,
c.name ,
object_name(o.object_id) as tabname
from    sys.database_permissions dp
inner

join sys.objects o on dp.major_id = o.object_id

inner

join sys.columns c on c.object_id = o.object_id

and c.column_id = dp.minor_id
inner

join sys.database_principals p on p.principal_id = dp.grantee_principal_id

where p.name='userb'

另外,關於delete、insert許可權,這個是沒有所謂的列許可權(column permissions)的,其實從邏輯上想想,你也能明白,這這兩者對應的最小單位為一條記錄,所以根本不能再細化到列級別了。

msg 1020, level 15, state 1, line 36

sub-entity lists (such as column or security expressions) cannot be specified for entity-level permissions.

mysql許可權 列許可權 mysql 的許可權體系介紹

mysql 的許可權體系大致分為5個層級 全域性層級 全域性許可權適用於乙個給定伺服器中的所有資料庫。這些許可權儲存在mysql.user表中。grant all on 和revoke all on 只授予和撤銷全域性許可權。資料庫層級 資料庫許可權適用於乙個給定資料庫中的所有目標。這些許可權儲存在...

Sql Server 指定列的乘積

需要統計指定列的乘積 sql server中有exp sum log 字段 的函式 如下例子 select workorder lineid round exp sum log throughrate 4 100 as throughrate from throughrate group by wo...

SQL Server許可權設定

常用的幾個系統表 其實是view sysdatabases,主資料庫,伺服器上的資料庫 sysobjects,每個資料庫,所有資料庫物件 syscolumns,每個資料庫,列 sysprocesses,主資料庫,程序 syspermissions,每個資料庫,許可權 sysusers,每個資料庫,使...