Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tSQL将在SQL Azure上设置具有查看定义权限的用户_Sql_Sql Server_Tsql_Azure_Azure Sql Database - Fatal编程技术网

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

tSQL将在SQL Azure上设置具有查看定义权限的用户,sql,sql-server,tsql,azure,azure-sql-database,Sql,Sql Server,Tsql,Azure,Azure Sql Database,我正在尝试使用Azure门户将SQL Azure数据库导出到.bacpac文件。我的数据库上的管理员用户名包含一个*。当我在用户名字段中使用它时,我得到了这个错误 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,

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

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) - @, $, + 门户导出表单接受该用户名,但随后出现错误,并显示以下消息

服务操作期间遇到错误。无法提取 来自指定数据库的包。逆向工程操作 无法继续,因为您没有对的视图定义权限 “MyActualDB”数据库

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

GRANT VIEW ANY DEFINITION TO gu6t6rdb 
这会引发以下错误

此版本的SQL server不支持安全类“server”


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

明白了。我可以将用户添加到
db_owner
角色中,然后导出将无误地进行

EXEC sp_addrolemember 'db_owner', 'gu6t6rdb'

这在sql azure上不起作用。您需要在数据库级别授予视图定义。(不带任何关键字)

将视图定义授予gu6t6rdb


注:我遇到了完全相同的问题,这似乎解决了我的问题。我还必须执行授权执行(但这取决于您的bacpac应用于数据库的内容)

现在,
将视图定义授权给[username]
在Azure SQL中工作,我只是自己验证了它。请参阅以供参考:

因此,为了成功地将数据库导出为bacpak文件,您可以创建包含的用户(无需在
CREATE LOGIN…
命令中),并授予以下权限:

CREATE USER [user_from_azure_AD] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [user_from_azure_AD] 
GRANT VIEW DEFINITION TO [user_from_azure_AD]

这并不是为基本上是只读的用户(如果需要仅导出)授予DBO权限的最佳方法。
CREATE USER [user_from_azure_AD] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [user_from_azure_AD] 
GRANT VIEW DEFINITION TO [user_from_azure_AD]