在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
createuser [usera] for login [usera]
go
給使用者授予相關列的查詢許可權(select)
grantselect(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
innerjoin sys.objects o on dp.major_id = o.object_id
innerjoin sys.columns c on c.object_id = o.object_id
and c.column_id = dp.minor_id
innerjoin 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兩個字段,其它字段不許修改。
grantupdate(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
innerjoin sys.objects o on dp.major_id = o.object_id
innerjoin sys.columns c on c.object_id = o.object_id
and c.column_id = dp.minor_id
innerjoin 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,每個資料庫,使...