tSQL在SQL Azure上设置具有"查看定义"权限的用户

dum*_*dad 5 sql t-sql sql-server azure azure-sql-database

我正在尝试.bacpac使用Azure门户将SQL Azure数据库导出到文件.我的数据库上的管理员用户名包含*.当我在用户名字段中使用它时,我收到此错误.

The login name must meet the following requirements:
It must be a SQL Identifier.
It cannot be a system name, for example:
- admin, administrator, sa, root, dbmanager, loginmanager, etc.
- Built-in database user or role like dbo, guest, public, etc. 
It cannot contain:
 - White space like spaces, tabs, or returns
 - Unicode characters
 - Nonalphabetic characters ("|:*?\/#&;,%=)
It cannot begin with:
 - Digits (0 through 9)
 - @, $, +

所以我使用以下tSQL将新用户添加到数据库.

USE master;
CREATE LOGIN gu6t6rdb WITH PASSWORD = 'kjucuejcj753jc8j'

USE MyActualDB;
CREATE USER gu6t6rdb FOR LOGIN gu6t6rdb
Run Code Online (Sandbox Code Playgroud)

门户网站导出表单接受该用户名但稍后出现以下错误的错误.

服务操作期间遇到错误.无法从指定的数据库中提取包.由于您没有"MyActualDB"数据库的"查看定义"权限,因此无法继续进行逆向工程操作.

为了解决这个问题,我尝试了以下tSQL

GRANT VIEW ANY DEFINITION TO gu6t6rdb 
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误

此版本的SQL Server不支持安全类"服务器"

我应该如何使用tSQL在我的数据库上提供额外的用户,并为用户提供足够的权限,通过Azure门户将数据库导出到.bacpacAzure blobstore中的文件?

小智 9

这不适用于sql azure.您需要在数据库级别授予视图定义.(没有ANY关键字)

授予对gu6t6rdb的定义

PS:我遇到了完全相同的问题,这似乎解决了我的问题.我还必须执行Grant Execute(但这取决于你的bacpac应用于数据库)


dum*_*dad 5

知道了。我可以将用户添加到db_owner角色,然后导出继续,不会出现错误。

EXEC sp_addrolemember 'db_owner', 'gu6t6rdb'
Run Code Online (Sandbox Code Playgroud)

  • 为本质上是只读的用户授予 DBO 权限(如果您只需要导出),这并不是最好的主意。 (7认同)