次のテンプレートを使用しようとしています。
-- =================================================
-- Create User as DBO template for SQL Azure Database
-- =================================================
-- For login <login_name, sysname, login_name>, create a user in the database
CREATE USER <user_name, sysname, user_name>
FOR LOGIN <login_name, sysname, login_name>
WITH DEFAULT_SCHEMA = <default_schema, sysname, dbo>
GO
-- Add user to the database owner role
EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>'
GO
「user1pass」のパスワードでuser1というユーザーを作成したいと思います。デフォルトのデータベース「認証」に接続し、クエリウィンドウを開いています。
しかし、テンプレートは私には意味がありません。たとえば、sysnameとは何ですか、パスワードはどこに入力し、default_schemaとして何を使用すればよいですか?
特定のユーザーには、すべてを実行する権限が必要です。しかし、彼がすべてを行えるように設定するにはどうすればよいですか?ユーザーをデータベース所有者にすればそれはできますか?
これまで私は試しました:
CREATE USER user1, sysname, user1
FOR LOGIN user1, sysname, user1
WITH DEFAULT_SCHEMA = dbo, sysname, dbo
GO
与える:
メッセージ102、レベル15、状態1、行1 '、'付近の構文が正しくありません。
そして:
CREATE USER user1
FOR LOGIN user1
WITH DEFAULT_SCHEMA = dbo
GO
与える:
メッセージ15007、レベル16、状態1、行1 'user1' i
s有効なログインではないか、権限がありません。
すべての情報については、このリンクを確認してください。 https://Azure.Microsoft.com/en-us/blog/adding-users-to-your-sql-Azure-database/
最初にSQL Azureのログインを作成する必要があります。構文は次のとおりです。
CREATE LOGIN username WITH password='password';
このコマンドはmaster dbで実行する必要があります。その後でのみコマンドを実行して、データベースにユーザーを作成できます。 SQL AzureまたはSQL Serverが機能する方法は、最初にサーバーレベルでログインが作成され、次にすべてのデータベースのユーザーにマップされることです。
HTH
編集-包含ユーザー(v12以降)
Sql Azure 12の時点で、データベースは Contained Databases として作成されます。これにより、マスター経由でサーバーにログインする必要なく、データベースにユーザーを直接作成できます。
CREATE USER [MyUser] WITH PASSWORD = 'Secret';
ALTER ROLE [db_datareader] ADD MEMBER [MyUser];
包含ユーザーを使用しているときにデータベースに接続するときは、接続文字列で常にデータベースを指定する必要があることに注意してください。
従来のサーバーログイン-データベースユーザー(12より前)
@Igorekの答えに追加するだけで、Sql Server Management Studioで次のことができます。
サーバーに新しいログインを作成しますmaster
で(SSMSのAvailable databases
ドロップダウン経由-これは、USE master
がAzureで機能しないためです):
ログインを作成します。
CREATE LOGIN username WITH password='password';
データベースに新しいユーザーを作成します
実際のデータベースへの切り替え(利用可能なデータベースのドロップダウン、または新しい接続を使用)
CREATE USER username FROM LOGIN username;
(ユーザーとログインをusername
として結び付けたいと思っていましたが、そうでない場合は変更します。)
次に、ユーザーを関連するセキュリティロールに追加します
EXEC sp_addrolemember N'db_owner', N'username'
GO
(明らかに、アプリユーザーはdbo
よりも少ない権限を持っている必要があります。)
ここで答えに従いましたが、新しいユーザーと接続しようとすると、"The server principal 'newuser' is not able to access the database 'master' under the current security context"
というエラーメッセージが表示されました。
また、SSMSで正常にログインするには、マスターテーブルに新しいユーザーを作成する必要がありました。
USE [master]
GO
CREATE LOGIN [newuser] WITH PASSWORD=N'blahpw'
GO
CREATE USER [newuser] FOR LOGIN [newuser] WITH DEFAULT_SCHEMA=[dbo]
GO
USE [MyDatabase]
CREATE USER newuser FOR LOGIN newuser WITH DEFAULT_SCHEMA = dbo
GO
EXEC sp_addrolemember N'db_owner', N'newuser'
GO
CodePlexの Azure管理コンソールツール を使用します。非常に便利なGUIで試してみます。いくつかのコードを入力して保存できます。
SQL DB V12に含まれるユーザーを簡単に作成できます。
Create user containeduser with password = 'Password'
含まれるユーザーログインは、masterによって作成されたログインを使用してデータベースにログインするよりも効率的です。詳細を見つけることができます@ http://www.sqlindepth.com/contained-users-in-sql-Azure-db-v12/
ユーザーを作成してから、特定のロールにユーザーを追加します。
CREATE USER [test] WITH PASSWORD=N'<strong password>'
go
ALTER ROLE [db_datareader] ADD MEMBER [test]
go
このリンクは非常に役に立ちました。
https://Azure.Microsoft.com/en-gb/documentation/articles/sql-database-manage-logins/
以下のような詳細があります:
-Azure SQL Databaseサブスクライバーアカウント
-Azure Active Directoryユーザーを使用してデータベースにアクセスする
-サーバーレベルのプリンシパルアカウント(無制限のアクセス)
-dbmanager
データベースロールへのユーザーの追加
これとスチュアートの答えを使用して、次のことを行いました。master
データベース上(この権限を持っているユーザーに関するリンクを参照):
CREATE LOGIN [MyAdmin] with password='ReallySecurePassword'
そして、問題のデータベースで:
CREATE USER [MyAdmin] FROM LOGIN [MyAdmin]
ALTER ROLE db_owner ADD MEMBER [MyAdmin]
リンクに従って、次のようなユーザーを作成することもできます。
CREATE USER [[email protected]] FROM EXTERNAL PROVIDER;
テンプレートでは、変数名、変数タイプ、デフォルト値の表記を使用していると思います。
Sysnameは、システムオブジェクトの名前を保持できる組み込みデータ型です。
128 Unicode文字に制限されています。
-- same as sysname type
declare @my_sysname nvarchar(128);