2012-11-18 16 views
9

Muszę zastąpić mojego starego użytkownika/użytkownika admin nowym. Próbowałem następujące:Utwórz nowe logowanie na poziomie administratora w usłudze Azure SQL?

CREATE LOGIN newDbAdmin WITH password='123isTheBestPasswordEver' 
CREATE USER newDbAdmin 

Dzięki temu jestem również w stanie zalogować się do Azure SQL przez Microsoft SQL Server Management Studio. Jednak wydaje się, że nie jest to login i użytkownik na poziomie administratora. Nie mogę utworzyć tabel i kilku innych rzeczy, które mogą zrobić administratorzy. Podejrzewam, że potrzebuję uprawnień GRANT do pewnych schematów (dbo?) Lub czegoś podobnego ...

A zatem, jaki jest właściwy sposób tworzenia użytkownika + logowania do usługi Azure SQL z tym samym poziomem przywilejów co oryginalny administrator (utworzone podczas tworzenia bazy danych za pośrednictwem witryny portalu Azure).

Na powiązana uwaga Zakładam właściwy sposób do rozporządzania off starą logowanie jest:

DROP USER oldAdmin 
DROP LOGIN oldAdmin 

?

Odpowiedz

0

właśnie utworzony login i odpowiedniego użytkownika, trzeba dodać odpowiednie członkostwa ról ...

np

EXEC sp_addrolemember 'dbmanager', 'login1User';

EXEC sp_addrolemember 'loginmanager', 'login1User';

patrz: https://azure.microsoft.com/documentation/articles/sql-database-manage-logins/

+4

Nie działa. Nie widzę żadnego z [dbo].*** tabele w mojej bazie danych non-master i podczas próby utworzenia tabeli w bazie danych non-master, pojawia się błąd podobny do 'CREATE TABLE, odmowa uprawnień w bazie danych 'master'." (pomimo komunikatu NIE próbuję aby utworzyć tabelę w głównej bazie danych ...) – DeepSpace101

+0

Uważam, że nie ma roli serwera w bazie danych Azure SQL, która zapewnia dostęp do wszystkich baz danych. 'dbmanager' umożliwia tworzenie baz danych,' loginmanager' pozwala na tworzenie loginów, ale główny login na poziomie serwera musi być użyty do przyznania dostępu do poszczególnych baz danych. – Rory

13

Można mieć tylko jednego administratora serwera poziomu. Możesz utworzyć dowolną liczbę innych loginów i użytkowników, ale musisz mieć dostęp do poszczególnych baz danych oddzielnie. Możesz zresetować hasło administratora serwera na portalu Lazur.

Nie ma roli serwera w bazie danych Azure SQL, która zapewnia dostęp do wszystkich baz danych. dbmanager pozwala tworzyć bazy danych, loginmanager pozwala tworzyć loginy, ale główny login na poziomie serwera musi być użyty do przyznania dostępu do poszczególnych baz danych.

Aby utworzyć nowego użytkownika i nadać DBO prawa do jednego lub więcej baz danych:

-- in master 
create login [XXXX] with password = 'YYYYY' 
create user [XXXX] from login [XXXX]; 

-- if you want the user to be able to create databases and logins 
exec sp_addRoleMember 'dbmanager', 'XXXX'; 
exec sp_addRoleMember 'loginmanager', 'XXXX' 

-- in each individual database, to grant dbo 
create user [XXXX] from login [XXXX]; 
exec sp_addRoleMember 'db_owner', 'XXXX'; 

I tak, you drop użytkowników w taki sam sposób, jak w sql na miejscu.

Jeśli chciał zrobić nowego użytkownika jako dbo na wszystkich baz danych na serwerze można użyć trochę PowerShell aby ułatwić Ci życie:

$newSqlUser = 'YOUR_NEW_LOGIN_HERE'; 
$serverName = 'YOUR-SERVER-NAME.database.windows.net' 
$sqlAdminLogin = 'YOUR-ADMIN-SQL-LOGIN' 
$createAdminUser = $TRUE; 

# generate a nice long random password 
Add-Type -Assembly System.Web 
$newSqlPassword = [Web.Security.Membership]::GeneratePassword(25,3) -Replace '[%&+=;:/]', "!"; 

# prompt for your server admin password. 
# Don't need the username param here but can be nice to avoid retyping 
$sqlCreds = get-Credential -Username $sqlAdminLogin -Message 'Enter admin sql credentials' 

# Create login and user in master db 
$sql = "create login [$newSqlUser] with password = '$newSqlPassword'; create user [$newSqlUser] from login [$newSqlUser];" 
invoke-sqlcmd -Query $sql -ServerInstance $serverName -Database 'master' -Username $sqlCreds.UserName -Password ($sqlCreds.GetNetworkCredential().Password) 
"new login: $newSqlUser" 
"password: $newSqlPassword" 

# sql to create user in each db 
if ($createAdminUser) { ` 
    $createUserSql = "create user [$newSqlUser] from login [$newSqlUser]; exec sp_addRoleMember 'db_owner', '$newSqlUser'; "; ` 
} else { ` 
    $createUserSql = "create user [$newSqlUser] from login [$newSqlUser]; exec sp_addRoleMember 'db_datareader', '$newSqlUser'; exec sp_addRoleMember 'db_denydatawriter', '$newSqlUser';"; ` 
} 

# can't have multiple Invoke-SQLCmd in a pipeline so get the dbnames first, then iterate 
$sql = "select name from sys.databases where name <> 'master';" 
$dbNames = @() 
invoke-sqlcmd -Query $sql -ServerInstance $serverName -Database 'master' -Username $sqlCreds.UserName -Password ($sqlCreds.GetNetworkCredential().Password) | ` 
    foreach { $dbNames += $_.name } 
# iterate over the dbs and add user to each one 
foreach ($db in $dbNames) { ` 
     invoke-sqlcmd -Query $createUserSql -ServerInstance $serverName -Database $db -Username ($sqlCreds.UserName) -Password $($sqlCreds.GetNetworkCredential().Password); ` 
     "created user in $db database"; ` 
} 
1

Można użyć Azure AD do zarządzania serwerem. Utwórz grupę DBA - przypisz wszystkie bazy danych do tej grupy. Następnie przypisz grupę jako menedżera AD serwera - dzięki temu będziesz mieć wiele administratorów DBA, którzy będą mieć pełne uprawnienia DBA na serwerze.

https://docs.microsoft.com/en-gb/azure/sql-database/sql-database-aad-authentication

Idealnie, myślę, że oczekują, aby korzystać poziom DB zawarte użytkowników przyznane przez DBA. Dla nas potrzebowaliśmy wielu administratorów, ponieważ mamy wiele baz danych.

Powiązane problemy