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

-- [SQL12_01.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、
--      テーブル作成時に、DRI作成権限を与える 
-- ことを理解します
--

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

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

-- **************************************
--  私にログインの登録権限がありますか?
-- **************************************
    IF(   IS_SRVROLEMEMBER('sysadmin')      <> 1
       AND
          IS_SRVROLEMEMBER('securityadmin') <> 1
    )
     BEGIN
          RAISERROR('私には新規ログインの作成権限がありません',
                     16 , 127 )
          RETURN
     END
GO


-- **********************************
--      私は dbo ユーザですか?
-- **********************************
    DECLARE @user_nm  varchar(20)
    SELECT  @user_nm = USER_NAME()  -- データベースユーザ名
    IF @user_nm <> 'dbo'
      BEGIN
          RAISERROR('あなたは ''%s'' です。dbo ユーザで実行してください',
                     16 , 127 , @user_nm )
          RETURN
      END


-- ******************************************
--   ログイン名 login01 と login02 を登録します
-- ******************************************
    -- ログインの登録検査は、masterデータベースのビュー表を見て
    -- 直接調べるのが簡単です
    IF NOT EXISTS ( SELECT name FROM master.dbo.syslogins 
                        WHERE ( name = 'login01' ) )
      BEGIN
          -- ログインが無いので、login01 ログインを 登録します
          EXEC sp_addlogin @loginame = 'login01' , 
                           @passwd   = NULL    ,
                           @defdb    = 'MySampleTest'

          -- 現在のカレントデータベースユーザとして登録する
          EXEC sp_grantdbaccess @loginame   = 'login01' ,
                                @name_in_db =  'user01'

          -- データベースユーザ user01 に、CREATE TABLE 権限を与える
          GRANT CREATE TABLE TO user01       
         
      END

    -- login02 の 検査
    IF NOT EXISTS ( SELECT name FROM master.dbo.syslogins 
                        WHERE ( name = 'login02' ) )
      BEGIN
          -- ログインが無いので、login02 ログインを 登録します
          EXEC sp_addlogin @loginame = 'login02' , 
                           @passwd   = NULL    ,
                           @defdb    = 'MySampleTest'

          -- 現在のカレントデータベースユーザとして登録する
          EXEC sp_grantdbaccess @loginame   = 'login02' ,
                                @name_in_db =  'user02'

          -- データベースユーザ user02 に、CREATE TABLE 権限を与える
          GRANT CREATE TABLE TO user02       
      END
GO



-- **********************************
--     テーブルを新規に作成します
-- **********************************
    IF( (object_id('DRIGrantCheck') IS NOT NULL) AND
        OBJECTPROPERTY( object_id('DRIGrantCheck'),'ISTABLE') = 1 )
      BEGIN
            -- 存在しているテーブルを削除する
            DROP TABLE DRIGrantCheck
      END
GO

    CREATE TABLE DRIGrantCheck( 
             ID  INT Primary Key ,
            DAT  CHAR(10)
    )
GO

-- **********************************
--   テーブルの権限を設定します
-- **********************************
    -- SELECT権限の設定(許可)
    -- GRANT SELECT ON DRIGrantCheck TO user01
    -- GRANT SELECT ON DRIGrantCheck TO user02

    -- user01に対して DRI を許可する
    GRANT REFERENCES( ID ) ON DRIGrantCheck to user01

    -- user02に対して DRI を拒否する
    DENY REFERENCES( ID ) ON DRIGrantCheck to user02
GO




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

ウィンドウを閉じる


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


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