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