1. 程式人生 > >mssql sqlserver SQL 位運算舉例許可權應用

mssql sqlserver SQL 位運算舉例許可權應用

摘要:
下文通過舉例的方式講述sqlserver中位運算的相關知識,如下所示:
實驗環境:sqlserver 2008 R2

在sqlserver的許可權設定,我們通常使用1、2、4、8、16、32、64、128等數值分別表示相關資訊的某一狀態供業務狀態使用,通過欄位值之間的組合形成一個狀態值儲存到資料庫中,
設定一個角色擁有的許可權
例: 
1:代表“檢視”按鈕許可權
2:代表"修改"按鈕
4:代表"匯出"按鈕
8:代表"刪除"按鈕
...

--例:
--許可權表如下:
create table userRole(userId varchar(36),
roleInfo int);
go

insert into userRole(userId,roleInfo)values('test',1) ---初始化測試賬號"test",擁有檢視許可權
insert into userRole(userId,roleInfo)values('貓貓',2) 
--當我們需要給使用者加入修改"2"許可權,則可以使用以下運算
update userRole set roleInfo =roleInfo|2 where userId ='test'


--當我們需要給使用者加入匯出"4"許可權,則可以繼續使用以下運算
update userRole set roleInfo =roleInfo|4 where userId ='test'


--當我們需要給使用者刪除匯出"4"許可權,則可以繼續使用以下運算
--刪除許可權前需判斷使用者是否存在此許可權,此指令碼不可多次執行
--if exists (select null from userRole where roleInfo &4 =4 and userId ='test')
---begin
update userRole set roleInfo =roleInfo^4 where userId ='test' and roleInfo&4 =4 
--end
---我們檢索所有擁有許可權"修改2"的使用者資訊
select * from userRole where roleInfo &2 = 2

go
truncate table userRole
drop table userRole

注意事項:
此處許可權設定,主要使用二進位制中每一位代表一個許可權及位運算的特性進行許可權的增減操作
由於"^異或運算"運算,左表示式1或0 時 右表示式為1時,將分別產生 0、1,所以剔除許可權時,一定要判斷是否存在此許可權