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