it-roy-ru.com

Как создать нового пользователя в базе данных SQL Azure?

Я пытаюсь использовать следующий шаблон:

-- =================================================
-- 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

Я хотел бы создать пользователя с именем user1 с паролем 'user1pass'. Я подключился к моей базе данных по умолчанию «Аутентификация», и у меня открылось окно запроса.

Но шаблон не имеет смысла для меня. Например, что такое 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

неверный логин или у вас нет разрешения.

47
user1679941

Проверьте эту ссылку для получения всей информации: 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 заключается в том, что сначала создается логин на уровне сервера, а затем он сопоставляется с пользователем в каждой базе данных.

НТН

24
Igorek

Правка - Содержится пользователь (v12 и более поздние версии)

Начиная с Sql Azure 12, базы данных будут создаваться как Contained Databases , что позволит создавать пользователей непосредственно в вашей базе данных, без необходимости входа на сервер через master.

CREATE USER [MyUser] WITH PASSWORD = 'Secret';
ALTER ROLE [db_datareader] ADD MEMBER [MyUser];

Обратите внимание, что при подключении к базе данных при использовании отдельного пользователя необходимо всегда указывать базу данных в строке подключения.

 Connecting via a contained User

Традиционный вход на сервер - Пользователь базы данных (до v 12)

Чтобы добавить ответ @ Igorek, вы можете сделать следующее в Sql Server Management Studio:

Создать новый логин на сервере
В master (через раскрывающийся список Available databases в SSMS - это потому, что USE master не работает в Azure):

enter image description here

создать логин:

CREATE LOGIN username WITH password='password';

Создать нового пользователя в базе данных
Переключиться на фактическую базу данных (снова через выпадающий список доступных баз данных или новое соединение)

CREATE USER username FROM LOGIN username;

(Я предположил, что вы хотите, чтобы пользователь и логины связывались как username, но измените, если это не так.)

Теперь добавьте пользователя в соответствующие роли безопасности

EXEC sp_addrolemember N'db_owner', N'username'
GO

(Очевидно, что пользователь приложения должен иметь меньше привилегий, чем dbo.)

77
StuartLC

Я следовал за ответами здесь, но когда я попытался соединиться с моим новым пользователем, я получил сообщение об ошибке с "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
18
nthpixel

Я использую инструмент консоли Azure Management из CodePlex, с очень полезным GUI, попробуйте его. Вы можете сохранить, введите код.

10
Jorge

Вы можете просто создать автономного пользователя в SQL DB V12. 

Create user containeduser with password = 'Password'

Вход в автономный пользователь более эффективен, чем вход в базу данных с использованием имени входа, созданного мастером. Вы можете найти более подробную информацию @ http://www.sqlindepth.com/contained-users-in-sql-Azure-db-v12/

7
Sirisha Chamarthi

создать пользователя и затем добавить пользователя к определенной роли:

CREATE USER [test] WITH PASSWORD=N'<strong password>'
go
ALTER ROLE [db_datareader] ADD MEMBER [test]
go
1
Antonio Santise

Я нашел эту ссылку очень полезной:
https://Azure.Microsoft.com/en-gb/documentation/articles/sql-database-manage-logins/

Это детали, такие как:
- учетная запись подписчика базы данных SQL Azure
- Использование пользователей 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;
0
noelicus

Я думаю, что шаблоны используют следующие обозначения: имя переменной, тип переменной, значение по умолчанию. 

Sysname - это встроенный тип данных, который может содержать имена системных объектов. 

Он ограничен 128 символами Юникода.

-- same as sysname type
declare @my_sysname nvarchar(128);
0
CRAFTY DBA