MSDE FunClub | 最終更新日 : 2000/08/22 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻) | ||
【第12章158p 〜 160p掲載】 |
-- [SQL12_11.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- 【データベースのオブジェクト権限を登録します】 -- -- [注意] -- システム管理者の方に、このSQL文を実行して頂きましょう -- SELECT文などの実行によって、( 件処理されました)の表示抑制 SET NOCOUNT ON GO -- *************************************************** -- 現在実行している人のログインセキュリティのチェック -- *************************************************** DECLARE @F_SYSADMIN int -- サーバーロールsysadminに、あなたは所属していますか? SELECT @F_SYSADMIN = IS_SRVROLEMEMBER( 'sysadmin' ) IF( @F_SYSADMIN=0 ) BEGIN -- 127番にすると、osqlやisqlではスクリプト強制終了です RAISERROR( '残念ですが登録権限がありません',16,127) RETURN END GO -- *********************************************************** -- オブジェクト権限登録を行なうテーブルの定義とレコードの登録 -- *********************************************************** CREATE TABLE #SECU_LIST ( dbname sysname , --権限登録を行うデータベース名 object sysname , --オブジェクトの名前 usernm sysname , --設定を行なうユーザ名 --'SELECT' 'INSERT' 'DELETE' 'UPDATE' 'REFERENCES' 'EXECUTE ' sqlcmd varchar(40) , --設定を行う命令 setcmd varchar(10) --許可:'GRANT' 削除:'REVOKE' 拒否:'DENY' ) --オブジェクト権限の定義 INSERT INTO #SECU_LIST VALUES('MySampleTest','社員' ,'Guest01','SELECT' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','社員' ,'Guest01','INSERT' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','社員' ,'Guest01','DELETE' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','社員' ,'Guest01','UPDATE' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','社員' ,'Guest01','REFERENCES', 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','社員','JTSD3\nm01' , 'SELECT','GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','社員','JTSD3\nm01' , 'UPDATE','GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','社員','public' , 'SELECT','GRANT' ) INSERT INTO #SECU_LIST VALUES('Northwind','Categories' ,'Guest01','SELECT' , 'DENY' ) INSERT INTO #SECU_LIST VALUES('Northwind','CustOrderHist','Guest01','EXECUTE', 'GRANT' ) GO -- *********************************** -- オブジェクト権限の一括登録処理 -- *********************************** DECLARE @dbname sysname --登録を行うデータベース名 DECLARE @object sysname --オブジェクトの名前 DECLARE @usernm sysname --ユーザ名 DECLARE @sqlcmd varchar(40) --設定を行う命令など DECLARE @setcmd varchar(10) --許可:'GRANT' 削除:'REVOKE' 拒否:'DENY' DECLARE @cmd varchar(256) --カーソルを定義する DECLARE Secu_CUR INSENSITIVE CURSOR FOR SELECT * FROM #SECU_LIST FOR READ ONLY -- カーソルを開く OPEN Secu_CUR -- 先頭行の読み込み FETCH NEXT FROM Secu_CUR INTO @dbname , @object , @usernm , @sqlcmd , @setcmd WHILE( @@FETCH_STATUS = 0 ) BEGIN -- 登録用コマンド文字列の作成 SELECT @cmd = 'USE ' + @dbname + ' ' + @setcmd + ' ' + @sqlcmd + ' ON ' + @object + ' ' + CASE @setcmd WHEN 'DENY' THEN 'TO' WHEN 'GRANT' THEN 'TO' WHEN 'REVOKE' THEN 'FROM' END + ' [' + @usernm + ']' --ユーザ名を[]で囲む --PRINT @cmd --1件分の権限を登録します EXEC( @cmd ) -- 次行の読み込み FETCH NEXT FROM Secu_CUR INTO @dbname , @object , @usernm , @sqlcmd , @setcmd END -- カーソルを閉じる CLOSE Secu_CUR -- カーソルを破棄する DEALLOCATE Secu_CUR -- 一時テーブルを破棄する DROP TABLE #SECU_LIST GO