Azure移动服务使用mssql对象访问Azure SQL数据库有哪些权限?

时间:2014-01-14 07:39:18

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

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

  

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

有些注意事项:

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

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的建议传递连接字符串。

谢谢!

1 个答案:

答案 0 :(得分:3)

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

为了确定分配给创建用户的权限,我创建了一个新的Mobile Service,然后我使用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。

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