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




技術評論社の書籍ガイドへ
下巻:ISBN4-7741-0966-5

ウィンドウを閉じる


(株)日本技術ソフト開発 責任編集:堀川 明
MSDE FunClubに関するご意見・ご要望等ございましたら、 msdefun@horikawa.ne.jp までご連絡下さい。
HOME: http://www.horikawa.ne.jp/msde/


MSDE FunClubの運営は、マイクロソフト社とは一切の関係はありません