【问题标题】:What permissions does Azure Mobile Services use to access an Azure SQL Database with the mssql object?Azure 移动服务使用什么权限来访问带有 mssql 对象的 Azure SQL 数据库?
【发布时间】:2014-01-14 07:39:18
【问题描述】:

像往常一样,我已经设置了与 Azure SQL 数据库关联的 Azure 移动服务 (AMS)。但是,当我尝试使用自定义 API 使用自定义 API mssql 对象查询另一个表(不是移动服务表)时,出现权限错误:

错误:[Microsoft][SQL Server Native Client 10.0][SQL Server]用户“zwxABOesblahblahHYzLogin”登录失败。

注意事项:

  • 我不得不删除数据库,然后在创建移动服务后使用相同的名称重新创建它。
  • 移动服务名称是“abc”,而我尝试访问的表属于“abc”架构,而不是 dbo。另一个表是从 SQL Server Management Studio 通过标准 T-SQL 脚本创建的。

AMS api 脚本非常基础:

exports.get = function(request, response) {
    var mssql = request.service.mssql;
    var sql = "select * from abc.TestTable";

    mssql.query(sql, {
        success : function(results) {
            console.log("Results from SQL Query to TestTable:\n"+results);
            response.send(statusCodes.OK, results);    
        },
        error: function(err) {
            console.log("Error in SQL Query to TestTable:\n"+err);
            response.send(statusCodes.Error,err.message);
        }

    });

};

所以对于我的问题... AMS 使用哪些凭据来访问 SQL 数据库?如何更改权限以便上面的脚本正常工作(正如我所看到的所有文档所暗示的那样!)。或者我是否坚持必须按照question 的建议传递连接字符串。

谢谢!

【问题讨论】:

    标签: azure azure-sql-database azure-mobile-services


    【解决方案1】:

    当您创建移动服务时,它会生成 SQL 数据库后端,或连接到现有的 SQL 数据库。当它这样做时,它会创建一个具有随机名称的 SQL 登录用户。在您的情况下,用户是“zwxABOesblahblahHYzLogin”。当您删除并重新创建数据库时,您失去了该用户访问数据库的权限(我想您已经知道了)。

    为了确定分配给创建的用户的权限,我创建了一个新的移动服务,然后使用 SQL Management Studio 编写整个数据库的脚本(我修改了脚本选项以确保权限将包含在脚本中)。然后,我将其精简为与用户和架构相关的内容。如果您已经重新创建了架构,则可以跳过该部分。

    CREATE USER [zwxABOesblahblahHYzLogin] FOR LOGIN [zwxABOesblahblahHYzLogin] WITH DEFAULT_SCHEMA=[abc]
    GO
    GRANT CONNECT TO [zwxABOesblahblahHYzLogin] AS [dbo]
    GRANT CREATE TABLE TO [zwxABOesblahblahHYzLogin] AS [dbo]
    CREATE SCHEMA [abc]
    GRANT CONTROL ON SCHEMA::[abc] TO [zwxABOesblahblahHYzLogin] AS [dbo]
    

    从这里看来,AMS 用户被授予数据库登录、连接权限、创建表权限,然后被授予作为 DBO 的架构控制权。

    我通过删除移动服务然后重新创建它来测试这一点,我认为这会使我们处于相同的场景中。

    【讨论】:

    • 非常感谢。只需在新版本的数据库上重新建立有效的登录即可。有趣的是,我不得不单独将该登录权限授予另一个现有的 dbo.[] 表。
    • @MikeWo,所以我想知道如何更改自动创建帐户的密码。我需要开发人员从 SSMS 访问它,但我不想给他们对 SQL Server 的 root 访问权限。如果我编写更改密码的脚本,我应该在移动服务的哪个位置更新凭据以便它仍然可以连接?
    • @Corgalore 如果您只需要授予开发人员访问权限,我会专门为此创建一个帐户,仅具有所需的权限并让他们使用该权限。我不会让开发人员访问 MobileService 登录。
    • @MikeWo 好提示。我最终创建了一个单独的 Azure SQL 登录。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2019-07-03
    相关资源
    最近更新 更多