在Azure SQL中创建新的管理员级别登录?

Dee*_*101 12 admin azure-sql-database

我需要用新的管理员登录/用户替换旧的管理员登录/用户.我尝试了以下方法:

CREATE LOGIN newDbAdmin WITH password='123isTheBestPasswordEver'
CREATE USER newDbAdmin
Run Code Online (Sandbox Code Playgroud)

有了这个,我就可以通过Microsoft SQL Server Management Studio登录Azure SQL.但它似乎不是管理员级登录+用户.我无法创建表和管理员可以做的其他一些事情.我怀疑我需要授予某些模式的权限(dbo?)或者那些沿线的东西......

那么,在Azure SQL上创建用户+登录的正确方法是什么,具有与原始管理员相同的权限级别(在我通过Azure门户网站创建数据库时创建).

在相关的说明中,我假设处理旧登录的正确方法是:

DROP USER oldAdmin
DROP LOGIN oldAdmin
Run Code Online (Sandbox Code Playgroud)

?

Ror*_*ory 19

您只能拥有一个服务器级管理员.您可以根据需要创建任意数量的其他登录名和用户,但需要分别授予他们对各个数据库的访问权限.您可以通过azure门户重置服务器级管理员的密码.

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';
Run Code Online (Sandbox Code Playgroud)

是的,您以与本地sql相同的方式删除用户.

如果您想在服务器上的所有数据库上创建一个新用户dbo,您可以使用一些PowerShell来让您的生活更轻松:

$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"; `
}
Run Code Online (Sandbox Code Playgroud)


Jun*_*neT 0

您刚刚创建了一个登录名和相应的用户,您必须添加适当的角色成员资格...

例如,

EXEC sp_addrolemember 'dbmanager', 'login1User';

EXEC sp_addrolemember 'loginmanager', 'login1User';

请参阅:https ://azure.microsoft.com/documentation/articles/sql-database-manage-logins/

  • 不起作用。我在非主数据库中看不到任何 [dbo].*** 表,并且当尝试在非主数据库中创建表时,我收到类似“数据库‘master 中创建表权限被拒绝’的错误” '.`(尽管有消息我并没有尝试在主数据库中创建表......) (4认同)