在數(shù)據(jù)庫開發(fā)中,經(jīng)常要設置用戶對數(shù)據(jù)庫的操作權限,通常有以下2種辦法:
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,信州企業(yè)網(wǎng)站建設,信州品牌網(wǎng)站建設,網(wǎng)站定制,信州網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,信州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
1、在數(shù)據(jù)庫中,建立一個權限表,記錄每個用戶對相應模塊(界面)的操作權限,然后在程序中使用。
我看到的一些公司的數(shù)據(jù)庫開發(fā)(用友也是這樣實現(xiàn))就用這種方式。
2、直接在SQL SERVER中建立數(shù)據(jù)庫用戶,配置每個用戶對數(shù)據(jù)表的操作權限。
在這里我主要講述第2種方式,可能使用到的SQL語句,直接配置數(shù)據(jù)表的權限,然后通過SQL語句返回用戶對表的操作權限,可以在應用程序中使用。
select * from sys.sysusers where name=[name] --查看數(shù)據(jù)庫用戶的信息
select * from sys.syslogins where name=[name] --查看登錄用戶的信息
create login [loginName] with password='password'--創(chuàng)建登錄名,并設置密碼
alter login [old_loginName] with name=[new_name]--修改登錄名
alter login [loginName] with password='[new password]' --修改密碼
drop login [loginName]--刪除登錄名
create user [db user] for login [login name] --創(chuàng)建用戶(必須要指定登錄名)
alter user [old db user] with name=[new db user]--修改用戶
sp_addrole [role_name] --添加數(shù)據(jù)庫角色
deny connect sql to [db user] --是否允許用戶連接到數(shù)據(jù)庫引擎grant
alter login [login name] enable|disable --允許或禁止登錄名
deny|grant connect to [db user] --禁止或授權用戶訪問數(shù)據(jù)庫
alter role [old_role_name] with name=[new_role_name] --更改角色名稱
查詢登錄名是否有連接到數(shù)據(jù)庫引擎的權限
SELECT state_desc from sys.server_permissions perm join sys.server_principals pri
on perm.grantee_principal_id=pri.principal_id where pri.name='[login name]'
查詢登錄用戶是否禁止或啟動
select is_disabled from sys.server_principals
where name='[login name]'
查詢用戶是否能連接到數(shù)據(jù)庫的權限
select permission_name from sys.database_permissions
where class=0 and grantee_principal_id=DATABASE_PRINCIPAL_ID('[db user]')
查詢用戶對表的權限
select sysp.type collate database_default,permission_name,state_desc,obj.name
from sys.database_permissions sysp
join sys.all_objects obj on obj.object_id=sysp.major_id
where sysp.grantee_principal_id=database_principal_id('db user') and obj.name='[table name]'