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

-- [SQL12_03.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--      ユーザ定義のデータベースロールの作成
--      ユーザ定義のデータベースロールの削除
-- を理解します
--

-- カレントデータベースを MySampleTest にする
    USE MySampleTest
GO

-- (件処理されました)のメッセージを抑止する
    SET NOCOUNT ON
GO

-- *************************************************
--  私は、db_owner または db_securityadmin ですか?
-- *************************************************
    IF(   IS_MEMBER('db_owner')         <> 1
       AND
          IS_MEMBER('db_securityadmin') <> 1
    )
     BEGIN
          RAISERROR('私にはロールメンバ操作の権限がありません',
                     16 , 127 )
          RETURN
     END
GO


-- ******************************************************************
--    データベースにロールDRIDenyが存在したら、所属メンバを全部削除して
--    ロールを削除します
--            メンバを削除するときは、カーソルを使うと便利です
-- ******************************************************************
    DECLARE @UID   SMALLINT
    DECLARE @MEMID SMALLINT
    DECLARE @usernm varchar(20)

    --ロールがありますか?ロールのIDを取得
    SELECT @UID = uid FROM  SYSUSERS WHERE (issqlrole = 1 AND name = 'DRIDeny' )
    IF ( @UID IS NOT NULL )
      BEGIN
        -- データベースにロールが存在しました
        -- 所属メンバに対して、カーソルを設定します
        DECLARE MEM CURSOR 
        FOR SELECT MEMBERUID FROM SYSMEMBERS WHERE( GROUPUID = @UID)

        -- カーソルを開く
        OPEN MEM

        -- 先頭レコードの取得に成功ですか?
        FETCH NEXT FROM MEM INTO @MEMID

        -- @@FETCH_STATUS外部変数が=0の間は、レコード取得に成功 
        WHILE( @@FETCH_STATUS = 0 )
          BEGIN
             -- 今取得したロールのメンバを削除します
             -- PRINT USER_NAME(@MEMID)
             SELECT @usernm = USER_NAME(@MEMID)
             EXEC sp_droprolemember 'DRIDeny', @usernm

             -- 次のレコードを取得する
             FETCH NEXT FROM MEM INTO @MEMID
         END

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

        -- 参照関係を解除する
        DEALLOCATE MEM

        -- ユーザ定義のロールを削除します
        EXEC sp_droprole 'DRIDeny'
    END
GO

-- **************************************************
--   データベースロール DRIDeny を作成しメンバを登録
-- **************************************************
    EXEC sp_addrole       'DRIDeny'            -- ロール作成
    EXEC sp_addrolemember 'DRIDeny' , 'user01' -- メンバ登録
    EXEC sp_addrolemember 'DRIDeny' , 'user02'
GO

-- **************************************************
--  データベースロール DRIDeny にセキュリティを設定する
--               外部参照を拒否する
-- **************************************************
    DENY REFERENCES( ID ) ON DRIGrantCheck to DRIDeny
GO

    PRINT 'DRIDenyロールの設定が終了しました'
GO




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

ウィンドウを閉じる


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


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