Azure移动服务使用什么权限访问带有mssql对象的Azure SQL数据库?

Azure移动服务使用什么权限访问带有mssql对象的Azure SQL数据库?,azure,azure-sql-database,azure-mobile-services,Azure,Azure Sql Database,Azure Mobile Services,我已经像往常一样设置了一个与Azure SQL数据库关联的Azure移动服务(AMS)。但是,当我尝试使用自定义api使用自定义apimssql对象查询另一个表(不是移动服务表)时,我得到一个权限错误: 错误:[Microsoft][SQL Server本机客户端10.0][SQL Server]用户“ZWXABOESBLAHBLAHYZLOGIN”登录失败 需要注意的一些事项: 我不得不删除数据库,然后在创建移动服务后用相同的名称重新创建它 移动服务名称是“abc”,我试图访问的表属于“ab

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

错误:[Microsoft][SQL Server本机客户端10.0][SQL Server]用户“ZWXABOESBLAHBLAHYZLOGIN”登录失败

需要注意的一些事项:

  • 我不得不删除数据库,然后在创建移动服务后用相同的名称重新创建它
  • 移动服务名称是“abc”,我试图访问的表属于“abc”模式,而不是dbo。另一个表是通过标准T-SQL脚本从SQLServerManagementStudio创建的
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数据库?如何更改权限以使上面的脚本正常工作(正如我看到的所有文档所暗示的!)。或者,我必须按照下面的建议传递一个连接字符串


谢谢

创建移动服务时,它会生成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的根访问权限。如果我编写了一个密码更改脚本,我在移动服务中的哪个位置更新凭据,以便它仍然可以连接?@Corgalore如果您只需要授予开发人员访问权限,我会专门为此创建一个帐户,仅具有它所需的权限,并让他们使用该权限。我不会让开发人员访问MobileService登录名。@MikeWo很好的提示。我最终创建了一个单独的Azure SQL登录。谢谢