SQL Server 上でデータベースを作成し、ログインを作成し、データベースのユーザーを作成するための一連の Transact-SQL について記述します。
テーブルやインデックスの作成などについては触れません。
SQL Server 認証と Windows 認証では若干異なるので、分割して記述します。
■ SQL Server 認証のユーザーを作成する場合
Database1 データベースを作成し、user1 ログインおよび user1 ユーザーを作成するには、以下のようなスクリプトを実行します。
use [master]
goif exists (select name from sys.databases where name = N'Database1')
drop database [Database1]
gocreate database [Database1]
goif exists (select name from sys.server_principals where name = N'user1')
drop login [user1]
gocreate login [user1] with password = N'P@ssw0rd', default_database = [Database1]
gouse [Database1]
gocreate user [user1]
goexec sp_addrolemember N'db_owner', N'user1'
go
注意点
(1) 同じ名前のデータベースが既に存在するかどうかを調べるには、次のように db_id を使用してもかまいません。
if db_id(N'Database1') is not null
drop database [Database1]
go
(2) exists の逆の判定をするには、次のように is null を使用します。
if (select name from sys.databases where name = N'Database1') is null
(3) 照合順序の指定を省略した場合、日本語版では Japanese_CI_AS が設定されます。
明示的に指定するには、次のように collate を使用します。
create database [Database1] collate Japanese_CI_AS
go
(4) ユーザーを削除するには次のようにします。
(今回の場合は、同じ名前のユーザーが既に存在していたとしてもデータベース自体を再作成しているので不要です。)
if exists (select name from sys.database_principals where name = N'user1')
drop user [user1]
go
(5) ログイン名とユーザー名が同じであれば、ユーザーを作成するときに for login を省略できます。
明示的に指定するには次のようにします。
create user [user1] for login [user1]
go
■ Windows 認証のユーザーを作成する場合
Database1 データベースを作成し、XYZPC\ASPNET ログインおよび XYZPC\ASPNET ユーザーを作成するには、
以下のようなスクリプトを実行します。
use [master]
goif exists (select name from sys.databases where name = N'Database1')
drop database [Database1]
gocreate database [Database1]
goif exists (select name from sys.server_principals where name = N'XYZPC\ASPNET')
drop login [XYZPC\ASPNET]
gocreate login [XYZPC\ASPNET] from windows with default_database = [master]
gouse [Database1]
gocreate user [XYZPC\ASPNET]
goexec sp_addrolemember N'db_owner', N'XYZPC\ASPNET'
go
バージョン情報
SQL Server 2005, 2008, 2008 R2