如何使用C#在Azure SQL数据库上创建包含的用户?

时间:2019-06-23 13:19:13

标签: c# sql-server azure azure-sql-database

我需要使用C#为我的Azure SQL数据库创建一个包含的用户。我已经有以下代码用于创建数据库:

// Login to Azure
var credentials = UserTokenProvider.LoginSilentAsync(clientId, domainName, username, password).Result;

// Create client
SqlManagementClient client = new SqlManagementClient(credentials)
{
    SubscriptionId = subscriptionId
};

// Database parameters
var databaseParameters = new Microsoft.Azure.Management.Sql.Models.Database()
{
    Location = "ukwest",
    ElasticPoolId = elasticPoolId,

};

// Create database
var dbResponse = client.Databases.CreateOrUpdate(resourceGroupName, serverName, databaseName, databaseParameters);

我发现以下SQL脚本可用于使用SQL Management Studio创建包含的用户,但这需要您手动连接到要为其创建用户的数据库:

CREATE USER [databaseUser] WITH PASSWORD = 'xxxxxxxxxxx';
ALTER ROLE [db_datareader] ADD MEMBER [databaseUser]
ALTER ROLE [db_datawriter] ADD MEMBER [databaseUser]

因此,如何在创建数据库后使用C#代码中的SQL脚本来连接数据库,然后为该数据库创建所包含的SQL用户,或者在 Microsoft.Azure中提供一些等效的代码。为此,要使用Management.Sql.SqlManagementClient

1 个答案:

答案 0 :(得分:4)

从概念上讲,您应该考虑Azure SQL数据库具有(至少)两个可以在其上进行操作的不同层:

  • 有一个REST API,用于控制操作,例如创建数据库,更改其保留大小,还原副本等。
  • 从创建表到插入行等,都有一个T-SQL接口用于数据库容器内的操作。

这两个表面可能会有一些重叠-在传统的SQL Server中,所有这些都在后面的T-SQL界面中公开。其中一些命令已在Azure SQL数据库中启用,它们正在内部为您调用REST API。

请注意,对REST API的操作使用与Azure的门户基础结构关联的凭据。在数据库内,您可以映射到SQL登录名/用户,但也可以具有完全不与Azure身份关联的SQL登录名/用户。

网络:您应该使用C#SQLClient连接到数据库,并使用具有足够权限(经过验证的用户,可能是管理员帐户或sa)的经过身份验证的用户运行这些命令,以设置新的用户和角色信息

Here's a an example on how to set up C# SQLClient