【问题标题】:How can I create a contained user on an Azure SQL database using C#?如何使用 C# 在 Azure SQL 数据库上创建包含用户?
【发布时间】:2019-06-23 13:19:13
【问题描述】:

我需要使用 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 管理工作室创建包含的用户,但这需要您手动连接到要为其创建用户的数据库:

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 这样做?

【问题讨论】:

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


    【解决方案1】:

    从概念上讲,您应该将 Azure SQL 数据库视为(至少)2 个可以操作的不同层:

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

    这两个表面可能有一些重叠 - 在传统的 SQL Server 中,所有这些都暴露在后一个 T-SQL 接口中。其中一些命令在 Azure SQL 数据库中启用,它们在内部为你调用 REST API。

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多