| 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