SQL Server中sysobjects含義及批量賦予許可權的方法

tolywang發表於2009-07-28

 --1 賦予jrzsfc賬號對所有使用者表select,insert,update,delete許可權

   DECLARE   ACUR   CURSOR   FOR  
   SELECT   name  FROM   SYSOBJECTS   WHERE   TYPE='U'  
   DECLARE   @NAME   VARCHAR(100)  
   DECLARE   @SQL   VARCHAR(512)  
   OPEN   ACUR  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   WHILE   @@fetch_status=0  
   BEGIN  
   EXEC   ('grant select,insert,delete,update ON ['+   @NAME+'] TO jrzsfc;')  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   END  
   CLOSE   ACUR  
   DEALLOCATE   ACUR

 

 --2 賦予jrzsfc對所有使用者檢視select,insert,update,delete許可權
 
   DECLARE   ACUR   CURSOR   FOR  
   SELECT   name  FROM   SYSOBJECTS   WHERE   TYPE='V' and status>0
   DECLARE   @NAME   VARCHAR(100)  
   DECLARE   @SQL   VARCHAR(512)  
   OPEN   ACUR  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   WHILE   @@fetch_status=0  
   BEGIN  
   EXEC   ('grant select,insert,delete,update ON ['+   @NAME+'] TO jrzsfc;')  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   END  
   CLOSE   ACUR  
   DEALLOCATE   ACUR
 


 --3 賦予jrzsfc對所有procedure execute許可權,剔除系統儲存過程
   DECLARE   ACUR   CURSOR   FOR  
   SELECT   name  FROM   SYSOBJECTS   WHERE   TYPE='P' and name not like 'dt%'
   DECLARE   @NAME   VARCHAR(100)  
   DECLARE   @SQL   VARCHAR(512)  
   OPEN   ACUR  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   WHILE   @@fetch_status=0  
   BEGIN  
   EXEC   ('grant execute ON ['+   @NAME+'] TO jrzsfc;')  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   END  
   CLOSE   ACUR  
   DEALLOCATE   ACUR
 


 --4 賦予jrzsfc對所有標量值函式execute許可權
   DECLARE   ACUR   CURSOR   FOR  
   SELECT   name  FROM   SYSOBJECTS   WHERE   TYPE='FN'
   DECLARE   @NAME   VARCHAR(100)  
   DECLARE   @SQL   VARCHAR(512)  
   OPEN   ACUR  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   WHILE   @@fetch_status=0  
   BEGIN
   EXEC   ('grant execute ON ['+   @NAME+'] TO jrzsfc;')  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   END  
   CLOSE   ACUR  
   DEALLOCATE   ACUR
 
 
 
 --5 賦予jrzsfc對表值函式select許可權
 
   DECLARE   ACUR   CURSOR   FOR  
   SELECT   name  FROM   SYSOBJECTS   WHERE   TYPE='TF'
   DECLARE   @NAME   VARCHAR(100)  
   DECLARE   @SQL   VARCHAR(512)  
   OPEN   ACUR  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   WHILE   @@fetch_status=0  
   BEGIN
   EXEC   ('grant select ON ['+   @NAME+'] TO jrzsfc;')  
   FETCH   NEXT   FROM   ACUR   INTO   @NAME  
   END  
   CLOSE   ACUR  
   DEALLOCATE   ACUR

 

--------------------------------------------------------------

 

sysobjects中type的定義如下:

sysobjects是MSSQL資料庫的系統表,在WEB許可權下可以正常訪問。
msysobjects是ACCESS資料庫的系統表,在WEB許可權下沒有許可權訪問,會提示"沒有許可權訪問"
我們在mssql的儲存過程中經常要處理一些特殊的物件,這些物件都存放在資料庫中的系統表sysobjects中,
並且通過type欄位來分類管理,那麼到底有哪些分類呢?


C=CHECK約束
D=預設值或Default約束
F=FOREIGN KEY約束
L=日誌(Log)
FN=標量函式
IF=內嵌表函式
P=儲存過程
PK=PRIMARY KEY約束(型別是 K)
RF=複製篩選儲存過程
S=系統表
TF=表函式
TR=觸發器
U=使用者表
UQ=UNIQUE約束(型別是K)
V=檢視
X=擴充套件儲存過程

例如:
while exists(select from sysobjects where type='F')
begin
...
end
這裡判斷了資料庫中是否存在外來鍵約束

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-610598/,如需轉載,請註明出處,否則將追究法律責任。

相關文章