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