2012-11-18 9 views
9

Ich muss meinen alten Admin Login/Benutzer durch einen neuen ersetzen. Ich habe versucht, die folgenden:Erstellen Sie eine neue Anmeldung auf Administratorebene in Azure SQL?

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

Damit bin ich dann auch in der Lage, in Azure SQL über Microsoft SQL Server Management Studio anmelden. Es scheint jedoch kein Login + Benutzer auf Admin-Ebene zu sein. Ich kann keine Tabellen und einige andere Dinge erstellen, die Administratoren tun können. Ich vermute, dass ich Berechtigungen für bestimmte Schemas (dbo?) Oder etwas in diesen Zeilen ...

GRANT ist Also, was ist der richtige Weg, um Benutzer + Anmeldung auf Azure SQL mit der gleichen Stufe von Berechtigungen wie der ursprüngliche Administrator zu erstellen (erstellt, wenn ich die Datenbank über die Azure-Portalsite erstellen).

über einen entsprechenden Hinweis, nehme ich an den richtigen Weg, die alte Login zu entsorgen ist:

DROP USER oldAdmin 
DROP LOGIN oldAdmin 

?

Antwort

0

Sie gerade ein Login und einen entsprechenden Benutzer, haben Sie die entsprechenden Rollenmitgliedschaften hinzufügen ...

z.B.

EXEC sp_addrolemember 'DBManager', 'login1User';

EXEC sp_addrolemember 'loginmanager', 'login1User';

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

+4

Funktioniert nicht. Ich sehe keine der [dbo].*** Tabellen in meiner Nicht-Master-Datenbank und beim Versuch, eine Tabelle in der Nicht-Master-Datenbank zu erstellen, bekomme ich einen Fehler wie 'CREATE TABLE-Berechtigung in der Datenbank 'Master' verweigert. (Trotz der Nachricht, die ich NICHT versuche um die Tabelle in der Master-Datenbank zu machen ...) – DeepSpace101

+0

Ich glaube, es gibt keine Serverrolle in der Azure SQL-Datenbank, die Zugriff auf alle Datenbanken gewährt. Mit 'dbmanager' können Sie Datenbanken erstellen, mit' loginmanager' können Sie Logins erstellen, aber der Prinzipal-Login auf Serverebene muss verwendet werden, um Zugriff auf einzelne Datenbanken zu gewähren. – Rory

13

Sie nur einen Server-Level-Admin haben. Sie können so viele andere Logins und Benutzer anlegen, wie Sie möchten, aber sie müssen Zugriff auf die einzelnen Datenbanken haben. Sie können das Passwort für den Administrator auf Serverebene über das azure-Portal zurücksetzen.

Es gibt keine Serverrolle in Azure SQL-Datenbank, die Zugriff auf alle Datenbanken gewährt. dbmanager können Sie Datenbanken erstellen, loginmanager können Sie Anmeldungen erstellen, aber die Server-Ebene Principal Login muss verwendet werden, um den Zugriff auf einzelne Datenbanken zu gewähren.

einen neuen Benutzer erstellen und DBO-Rechte auf eine oder mehrere Datenbanken geben:

-- 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'; 

Und ja, Sie fallen Benutzer auf die gleiche Art und Weise Sie On-Premise würde in SQL.

Wenn Sie machen wollte einen neuen Benutzer als dbo auf alle Datenbanken auf einem Server, den Sie ein wenig Powershell verwenden können, um Ihr Leben leichter zu machen: kann

$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

Sie verwenden Azure AD, den Server zu verwalten. Erstellen Sie eine DBA-Gruppe - weisen Sie alle DBAs dieser Gruppe zu. Weisen Sie dann die Gruppe als AD-Manager für den Server zu. Dadurch können Sie mehrere DBAs verwenden.

Jeder in dieser Gruppe hat vollständige DBA-Berechtigungen für den Server.

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

Idealerweise denke ich, sie erwarten, dass Sie DB-Ebene Benutzer von einem DBA gewährt enthalten verwenden. Für uns brauchten wir mehrere Admins, da wir viele Datenbanken haben.