| MSDE FunClub |
|
最終更新日 : 2000/08/22 |
|
Microsoft Data Engine FunClub
|
Since 2000.08.22
|
|
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