我需要用一个新的来代替我的老管理员登录/用户。 我试过如下:
CREATE LOGIN newDbAdmin WITH password='123isTheBestPasswordEver'
CREATE USER newDbAdmin
有了这个,我随后也能够通过微软SQL Server Management Studio中登录到SQL Azure中。 然而,它似乎并没有成为一个管理员级别的登录+用户。 我无法创建表和一些其他的东西,管理员可以做。 我怀疑我需要将权限授予特定的模式(DBO?)或类似的规定?
那么,什么是对SQL Azure中创建用户登录+与同级别的权限与原始管理(当我通过在Azure门户网站创建数据库创建)以正确的方式。
在一个相关的说明,我想处置掉旧的登录名是正确的方法:
DROP USER oldAdmin
DROP LOGIN oldAdmin
?
你只能有一个服务器级别的管理员。 只要你喜欢,但他们需要单独授予访问单个数据库可以创建许多其他的登录和用户。 您可以通过门户网站湛蓝重置为服务器级管理员密码。
有一个在Azure中的SQL数据库授权访问所有数据库的服务器角色。 dbmanager
可以让你创建数据库, loginmanager
允许您创建登录,但服务器级主体登录必须被用来授予访问单个数据库。
要创建一个新用户并授予DBO权限,以一个或多个数据库:
-- 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';
是的,你把用户你会在本地SQL一样。
如果你想使一个新用户作为上,你可以使用一个小的PowerShell,使您的生活更容易在服务器上的所有数据库DBO:
$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"; `
}
您可以使用Azure的AD来管理服务器。 创建一个DBA组 - 分配所有的DBA到该组。 然后分配组作为广告管理系统的服务器 - 这可以让你有多个数据库管理员
任何人组将拥有服务器的完全DBA权限。
https://docs.microsoft.com/en-gb/azure/sql-database/sql-database-aad-authentication
理想情况下,我想,他们希望你能使用DB级别包含由DBA授予用户。 对于我们来说,我们需要多个管理员,因为我们有很多的数据库。
您刚刚创建了一个用户名和相应的用户,你必须添加适当的角色成员...
例如,
EXEC sp_addrolemember 'dbmanager', 'login1User';
EXEC sp_addrolemember 'loginmanager', 'login1User';
见: https://azure.microsoft.com/documentation/articles/sql-database-manage-logins/