MSDE FunClub | 最終更新日 : 2000/08/22 | |
Microsoft Data Engine FunClub |
|
|
SQLServer7.0/MSDE 完全トレーニングテキスト(下巻) | ||
【第12章140p 〜 144p掲載】 |
-- [SQL12_06.SQL] -- SQLServer7.0 Transact-SQL言語 -- 日本技術ソフト開発 堀川 明 -- http://www.horikawa.ne.jp/msde/ -- -- 【SQLServer認証ログインの一括登録処理】 -- -- [注意] -- 1人分のログイン登録は、SQL01_01プログラムでも実施しています -- システム管理者の方に、この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('AddLogin') IS NOT NULL) AND (OBJECTPROPERTY( object_id('AddLogin' ) , 'IsProcedure' ) = 1 ) ) BEGIN DROP PROCEDURE AddLogin --既存のものを削除する END GO CREATE PROCEDURE AddLogin @lognm sysname , -- ログイン名 @passwd sysname = NULL , -- パスワード @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 -- ストアドプロシージャの戻り値を受け取る -- ログインを1件分登録する EXEC @RETVAL = sp_addlogin @lognm , --ログインの名前 @passwd , --パスワードを省略するときは NULL @defdb , --既定のデータベース先 NULL , --既定言語(デフォルト) NULL , --セキュリティID番号(デフォルト) NULL --パスワードを暗号化して登録する --ストアドプロシージャの実行結果は失敗しましたか? 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 , -- ログイン名 passwd sysname NULL DEFAULT NULL , -- パスワード 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 ( 'Guest01' ) INSERT INTO #LOGIN_LIST( lognm , passwd ) VALUES ( 'Guest02' , 'pass' ) INSERT INTO #LOGIN_LIST VALUES ( 'Guest03' , 'pass' , 'MySampleTest' , 0,0,0,0,0,0,1) INSERT INTO #LOGIN_LIST VALUES ( 'Guest04' , 'pass' , DEFAULT , 0,0,0,0,0,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'Guest05' , 'pass' , DEFAULT , 0,0,0,0,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'Guest06' , 'pass' , DEFAULT , 0,0,0,1,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'Guest07' , 'pass' , DEFAULT , 0,0,1,1,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'Guest08' , 'pass' , DEFAULT , 0,1,1,1,1,1,1) INSERT INTO #LOGIN_LIST VALUES ( 'sa2' , DEFAULT , DEFAULT , 1,0,0,0,0,0,0) GO -- ************************** -- ログインの一括登録処理 -- ************************** DECLARE @lognm sysname -- ログイン名 DECLARE @passwd 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 , @passwd , @defdb , @sysadmin , @securityadmin , @serveradmin , @setupadmin , @processadmin , @diskadmin , @dbcreator WHILE( @@FETCH_STATUS = 0 ) BEGIN -- 1件分のログインの登録(エラー処理は省略) EXEC AddLogin @lognm , @passwd , @defdb , @sysadmin , @securityadmin , @serveradmin , @setupadmin , @processadmin , @diskadmin , @dbcreator -- 次行の読み込み FETCH NEXT FROM Log_CUR INTO @lognm , @passwd , @defdb , @sysadmin , @securityadmin , @serveradmin , @setupadmin , @processadmin , @diskadmin , @dbcreator END -- カーソルを閉じる CLOSE Log_CUR -- カーソルを破棄する DEALLOCATE Log_CUR -- 一時テーブルを破棄する DROP TABLE #LOGIN_LIST -- プロシージャも削除する DROP PROCEDURE AddLogin GO