MSDE FunClub | 最終更新日 : 2000/08/22 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻) | ||
【第12章144p 〜 148p掲載】 |
-- [SQL12_07.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- 【WindowsNT認証ログインの一括登録処理】 -- -- [注意] -- システム管理者の方に、このSQL文を実行して頂きましょう -- SELECT文などの実行によって、( 件処理されました)の表示抑制 SET NOCOUNT ON GO -- *************************************************** -- 現在実行している人のログインセキュリティのチェック -- *************************************************** DECLARE @F_SYSADMIN int , @F_SECUADMIN int -- サーバーロールsysadminに、あなたは所属していますか? SELECT @F_SYSADMIN = IS_SRVROLEMEMBER( 'sysadmin' ) -- サーバーロールsecurityadminに、あなたは所属していますか? SELECT @F_SECUADMIN = IS_SRVROLEMEMBER( 'securityadmin' ) IF( (@F_SYSADMIN=0) AND (@F_SECUADMIN=0) ) BEGIN -- 127番にすると、osqlやisqlではスクリプト強制終了です RAISERROR( '残念ですがログイン登録の権限がありません',16,127) RETURN END GO -- ***************************************************** -- ログインを1件分登録するストアドプロシージャの作成 -- ***************************************************** IF( (object_id('AddLoginNT') IS NOT NULL) AND (OBJECTPROPERTY( object_id('AddLoginNT' ) , 'IsProcedure' ) = 1 ) ) BEGIN DROP PROCEDURE AddLoginNT --既存のものを削除する END GO CREATE PROCEDURE AddLoginNT @lognm sysname , -- ログイン名 @defdb sysname = 'master' , -- 既定のデータベース @sysadmin int = 0 , -- 所属させるサーバーロールです @securityadmin int = 0 , -- 所属させるときは =1 です @serveradmin int = 0 , @setupadmin int = 0 , @processadmin int = 0 , @diskadmin int = 0 , @dbcreator int = 0 AS SET NOCOUNT ON DECLARE @RETVAL int -- ストアドプロシージャの戻り値を受け取る -- WindowsNT認証ログインを1件分登録する EXEC @RETVAL = sp_grantlogin @lognm --ストアドプロシージャの実行結果は失敗しましたか? IF( @RETVAL = 1 ) RETURN 1 --既定のデータベースを定義します EXEC @RETVAL = sp_defaultdb @lognm , @defdb --ストアドプロシージャの実行結果は失敗しましたか? IF( @RETVAL = 1 ) RETURN 1 -- 今登録したログインに対して固定サーバーロールに所属 IF( @sysadmin = 1 ) EXEC @RETVAL = sp_addsrvrolemember @lognm , 'sysadmin' IF( @securityadmin = 1 ) EXEC @RETVAL = sp_addsrvrolemember @lognm , 'securityadmin' IF( @serveradmin = 1 ) EXEC @RETVAL = sp_addsrvrolemember @lognm , 'serveradmin' IF( @setupadmin = 1 ) EXEC @RETVAL = sp_addsrvrolemember @lognm , 'setupadmin' IF( @processadmin = 1 ) EXEC @RETVAL = sp_addsrvrolemember @lognm , 'processadmin' IF( @diskadmin = 1 ) EXEC @RETVAL = sp_addsrvrolemember @lognm , 'diskadmin' IF( @dbcreator = 1 ) EXEC @RETVAL = sp_addsrvrolemember @lognm , 'dbcreator' RETURN @RETVAL GO -- *********************************************************** -- ログイン一括登録を行なうテーブルの定義とレコードの登録 -- *********************************************************** CREATE TABLE #LOGIN_LIST ( lognm sysname , -- ログイン名 defdb sysname DEFAULT 'master' , -- 既定のデータベース sysadmin int DEFAULT 0 , -- 所属させるサーバーロールです securityadmin int DEFAULT 0 , -- 所属させるときは =1 です serveradmin int DEFAULT 0 , setupadmin int DEFAULT 0 , processadmin int DEFAULT 0 , diskadmin int DEFAULT 0 , dbcreator int DEFAULT 0 ) --ログイン登録者リストの定義 INSERT INTO #LOGIN_LIST( lognm ) VALUES ( 'JTSD3\nm01' ) INSERT INTO #LOGIN_LIST( lognm ) VALUES ( 'JTSD3\nm02' ) INSERT INTO #LOGIN_LIST VALUES ( 'JTSD3\nm03' , 'MySampleTest' , 0,0,0,0,0,0,1) INSERT INTO #LOGIN_LIST VALUES ( 'JTSD3\nm04' , DEFAULT , 0,0,0,0,0,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'JTSD3\nm05' , DEFAULT , 0,0,0,0,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'JTSD3\nm06' , DEFAULT , 0,0,0,1,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'JTSD3\nm07' , DEFAULT , 0,0,1,1,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'JTSD3\nm08' , DEFAULT , 0,1,1,1,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'JTSD3\nm09' , DEFAULT , 1,0,0,0,0,0,0) GO -- ************************** -- ログインの一括登録処理 -- ************************** DECLARE @lognm sysname -- ログイン名 DECLARE @defdb sysname -- 既定のデータベース DECLARE @sysadmin int -- 所属させるサーバーロールです DECLARE @securityadmin int -- 所属させるときは =1 です DECLARE @serveradmin int DECLARE @setupadmin int DECLARE @processadmin int DECLARE @diskadmin int DECLARE @dbcreator int --カーソルを定義する DECLARE Log_CUR INSENSITIVE CURSOR FOR SELECT * FROM #LOGIN_LIST FOR READ ONLY -- カーソルを開く OPEN Log_CUR -- 先頭行の読み込み FETCH NEXT FROM Log_CUR INTO @lognm , @defdb , @sysadmin , @securityadmin , @serveradmin , @setupadmin , @processadmin , @diskadmin , @dbcreator WHILE( @@FETCH_STATUS = 0 ) BEGIN -- 1件分のログインの登録(エラー処理は省略) EXEC AddLoginNT @lognm , @defdb , @sysadmin , @securityadmin , @serveradmin , @setupadmin , @processadmin , @diskadmin , @dbcreator -- 次行の読み込み FETCH NEXT FROM Log_CUR INTO @lognm , @defdb , @sysadmin , @securityadmin , @serveradmin , @setupadmin , @processadmin , @diskadmin , @dbcreator END -- カーソルを閉じる CLOSE Log_CUR -- カーソルを破棄する DEALLOCATE Log_CUR -- 一時テーブルを破棄する DROP TABLE #LOGIN_LIST -- プロシージャも削除する DROP PROCEDURE AddLoginNT GO