MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/08/22
Microsoft Data Engine FunClub
Since 2000.08.22
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻)
【第12章150p 〜 154p掲載】

-- [SQL12_09.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
--          【データベースのユーザを登録する】
--
-- [注意]
--   システム管理者の方に、このSQL文を実行して頂きましょう
--   Pubs と 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

--  ***************************************************
--                【データベースの存在確認】
--                Pubs と Northwind の確認
--  ***************************************************
    IF NOT EXISTS( SELECT name FROM master..sysdatabases
                     WHERE( name = 'Pubs' ) )
       RAISERROR('Pubs データベースが存在しません。適当に作成してください',0,1)

    IF NOT EXISTS( SELECT name FROM master..sysdatabases
                     WHERE( name = 'Northwind' ) )
       RAISERROR('Northwindデータベースが存在しません。適当に作成してください',0,1)
GO

--  ***********************************************************
--         ユーザ登録を行なうテーブルの定義とレコードの登録
--  ***********************************************************
    CREATE TABLE #USER_LIST (
               dbname    sysname        ,           --ユーザ登録を行うデータベース名
               lognm     sysname        ,           --ログイン名
               usernm    sysname NULL DEFAULT NULL  --ログイン名に対応したユーザ名
    )

    CREATE TABLE #USER_DBRL (
               dbname    sysname        ,           --データベース
               usernm    sysname        ,           --ロールを設定するユーザ名
               rolenm    sysname                    --許可するロール名
    )

    --ユーザ登録リストの定義
    INSERT INTO #USER_LIST VALUES ( 'MySampleTest' , 'Guest01' , NULL )
    INSERT INTO #USER_LIST VALUES ( 'Pubs'         , 'Guest01' , NULL )
    INSERT INTO #USER_LIST VALUES ( 'Northwind'    , 'Guest01' , NULL )

    INSERT INTO #USER_LIST VALUES ( 'MySampleTest' , 'Guest02' , NULL )
    INSERT INTO #USER_LIST VALUES ( 'Pubs'         , 'Guest02' , NULL )
    INSERT INTO #USER_LIST VALUES ( 'Northwind'    , 'Guest02' , NULL )

    INSERT INTO #USER_LIST VALUES ( 'MySampleTest' , 'JTSD3\nm01' , NULL )
    INSERT INTO #USER_LIST VALUES ( 'Pubs'         , 'JTSD3\nm01' , NULL )
    INSERT INTO #USER_LIST VALUES ( 'Northwind'    , 'JTSD3\nm01' , NULL )

    INSERT INTO #USER_LIST VALUES ( 'MySampleTest' , 'JTSD3\nm02' , 'usr02' )
    INSERT INTO #USER_LIST VALUES ( 'Pubs'         , 'JTSD3\nm02' , 'usr02' )
    INSERT INTO #USER_LIST VALUES ( 'Northwind'    , 'JTSD3\nm02' , 'usr02' )


    --*************************
    --データベースロールの定義
    --*************************
    INSERT INTO #USER_DBRL VALUES ( 'MySampleTest' , 'Guest01' , 'db_owner' )
    INSERT INTO #USER_DBRL VALUES ( 'Pubs'         , 'Guest01' , 'db_accessadmin' )
    INSERT INTO #USER_DBRL VALUES ( 'Pubs'         , 'Guest01' , 'db_ddladmin' )
    INSERT INTO #USER_DBRL VALUES ( 'Pubs'         , 'Guest01' , 'db_securityadmin' )
    INSERT INTO #USER_DBRL VALUES ( 'Northwind'    , 'Guest01' , 'db_owner' )

    INSERT INTO #USER_DBRL VALUES ( 'MySampleTest' , 'usr02' , 'db_owner' )
    INSERT INTO #USER_DBRL VALUES ( 'Pubs'         , 'usr02' , 'db_accessadmin' )
    INSERT INTO #USER_DBRL VALUES ( 'Pubs'         , 'usr02' , 'db_ddladmin' )
    INSERT INTO #USER_DBRL VALUES ( 'Pubs'         , 'usr02' , 'db_securityadmin' )
    INSERT INTO #USER_DBRL VALUES ( 'Northwind'    , 'usr02' , 'db_owner' )
GO


--  ***********************************
--    データベースユーザの一括登録処理
--  ***********************************
    DECLARE @dbname    sysname         --ユーザ登録を行うデータベース名
    DECLARE @lognm     sysname         -- ログイン名
    DECLARE @usernm    sysname         --ログイン名に対応したユーザ名
    DECLARE @cmd       varchar(256)
 
    --カーソルを定義する 
    DECLARE User_CUR INSENSITIVE CURSOR
        FOR SELECT * FROM #USER_LIST
        FOR READ ONLY

    -- カーソルを開く
    OPEN User_CUR

    -- 先頭行の読み込み
    FETCH NEXT FROM User_CUR INTO @dbname , @lognm , @usernm

    WHILE( @@FETCH_STATUS = 0 )
      BEGIN
             -- ユーザ登録用コマンド文字列の作成
             SELECT @cmd = 'USE  ' + @dbname + ' ' +
                           'EXEC sp_grantdbaccess ''' + @lognm + ''' , ' +
                           CASE 
                              WHEN @usernm is null THEN 'NULL'
                              ELSE '''' + @usernm + ''''
                           END
             --PRINT @cmd

             --1件分のユーザを登録します
             EXEC( @cmd )

             -- 次行の読み込み
             FETCH NEXT FROM User_CUR INTO @dbname , @lognm , @usernm
      END

    -- カーソルを閉じる
    CLOSE User_CUR

    -- カーソルを破棄する
    DEALLOCATE User_CUR

    -- 一時テーブルを破棄する
    DROP TABLE  #USER_LIST
GO



--  ***********************************
--    データベースロールの設定を行なう
--  ***********************************
    DECLARE @dbname    sysname         --ユーザ登録を行うデータベース名
    DECLARE @usernm    sysname         --ユーザ名
    DECLARE @role      sysname         --登録を行うデータベースロール名
    DECLARE @cmd       varchar(256)
 
    --カーソルを定義する 
    DECLARE User_CUR INSENSITIVE CURSOR
        FOR SELECT * FROM #USER_DBRL
        FOR READ ONLY

    -- カーソルを開く
    OPEN User_CUR

    -- 先頭行の読み込み
    FETCH NEXT FROM User_CUR INTO @dbname , @usernm , @role

    WHILE( @@FETCH_STATUS = 0 )
      BEGIN
             -- ロール登録用コマンド文字列の作成
             SELECT @cmd = 'USE  ' + @dbname + ' ' +
                           'EXEC sp_addrolemember ''' + @role + ''' , ' +
                                 '''' + @usernm + ''''
             --PRINT @cmd

             --1件分のロールを登録します
             EXEC( @cmd )

             -- 次行の読み込み
             FETCH NEXT FROM User_CUR INTO @dbname , @usernm , @role
      END

    -- カーソルを閉じる
    CLOSE User_CUR

    -- カーソルを破棄する
    DEALLOCATE User_CUR

    -- 一時テーブルを破棄する
    DROP TABLE  #USER_DBRL
GO




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

ウィンドウを閉じる


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


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