MSDE FunClub | 最終更新日 : 2000/08/22 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻) | ||
【第12章155p 〜 157p掲載】 |
-- [SQL12_10.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- 【データベースのステートメント権限を登録します】 -- -- [注意] -- システム管理者の方に、このSQL文を実行して頂きましょう -- Northwindデータベースが存在しない場合は、このプログラム -- はエラーが起こりますので、適当に作成してください。 -- 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 , --権限登録を行うデータベース名 usernm sysname , --設定を行なうユーザ名 sqlcmd varchar(40) , --設定を行う命令 'CREATE TABLE'など setcmd varchar(10) --許可:'GRANT' 削除:'REVOKE' 拒否:'DENY' ) --ステートメント登録権限の定義 INSERT INTO #SECU_LIST VALUES('MySampleTest','Guest01' , 'CREATE TABLE' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','Guest01' , 'CREATE VIEW' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','Guest01' , 'CREATE PROCEDURE', 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','Guest01' , 'BACKUP DATABASE' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','Guest01' , 'BACKUP LOG' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','JTSD3\nm01' , 'CREATE VIEW' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('MySampleTest','public' , 'CREATE TABLE' , 'GRANT' ) INSERT INTO #SECU_LIST VALUES('Northwind','Guest01' , 'CREATE TABLE' , 'DENY' ) INSERT INTO #SECU_LIST VALUES('Northwind','Guest01' , 'CREATE VIEW' , 'DENY' ) INSERT INTO #SECU_LIST VALUES('Northwind','Guest01' , 'CREATE PROCEDURE', 'DENY' ) INSERT INTO #SECU_LIST VALUES('Northwind','Guest01' , 'BACKUP DATABASE' , 'DENY' ) INSERT INTO #SECU_LIST VALUES('Northwind','Guest01' , 'BACKUP LOG' , 'DENY' ) GO -- *********************************** -- ステートメント権限の一括登録処理 -- *********************************** DECLARE @dbname sysname --登録を行うデータベース名 DECLARE @usernm sysname --ユーザ名 DECLARE @sqlcmd varchar(40) --設定を行う命令 'CREATE TABLE'など 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 , @usernm , @sqlcmd , @setcmd WHILE( @@FETCH_STATUS = 0 ) BEGIN -- 登録用コマンド文字列の作成 SELECT @cmd = 'USE ' + @dbname + ' ' + @setcmd + ' ' + @sqlcmd + ' ' + 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 , @usernm , @sqlcmd , @setcmd END -- カーソルを閉じる CLOSE Secu_CUR -- カーソルを破棄する DEALLOCATE Secu_CUR -- 一時テーブルを破棄する DROP TABLE #SECU_LIST GO