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