sql-server - 如何以所有者和唯一用户的身份修复 Azure SQL Server 中的数据库权限?

标签 sql-server azure t-sql

我正在使用基于云的 Azure SQL Server 和 SQL 数据库。为了对数据库中的表进行分组,我“成功”创建了一个新架构。但是,所有使用该架构的尝试都会导致没有权限的错误,并且我找不到添加权限的方法(见下文)。这个麻烦不值得进行故障排除,因此我放弃了这个想法,回到了我现有的单一架构名称。

从那时起,我无法再在原始架构上创建名为 qbo 的表:

CREATE TABLE qbo.NewTable (
    pkey int PRIMARY KEY,
);

Started executing query at Line 1
Msg 2760, Level 16, State 1, Line 1
The specified schema name "qbo" either does not exist or you do not have permission to use it.
Total execution time: 00:00:00.034

我可以创建一个完全不指定模式的表(我假设将发送到 dbo),或者指定 dbo,但随后我无法查询该表,因为 SELECT 权限被拒绝。

CREATE TABLE [dbo].[NewTable] (
    pkey int PRIMARY KEY,
);

Started executing query at Line 1
Commands completed successfully.
Total execution time: 00:00:00.194

SELECT * FROM [dbo].[NewTable]

Started executing query at Line 1
Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object 'NewTable', database 'master', schema 'dbo'.
Total execution time: 00:00:00.036

当我尝试授予权限时:

GRANT CONTROL ON SCHEMA :: dbo TO <myUserName>

Started executing query at Line 1
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Total execution time: 00:00:00.035

我是唯一的数据库用户,也是具有所有者角色的服务器管理员。我还没有找到通过门户来更改任何内容的方法,并且 Azure Data Studio 中尝试更正所有内容的任何 T-SQL 语句都会导致上述相同类型的错误。我假设创建另一个模式时更改了某些后端设置。但据我所知,自从创建数据库以来,我没有专门撤销任何开始时的权限,该数据库已经顺利运行了大约 3 个月,包括 CREATE、UPDATE、DROP 等。

至少,我需要回去完全操作我自己的 db 和 qbo 模式,但额外的功劳是帮助我理解我搞砸了什么以及我是否真的可以使用多个模式。谢谢!

更新:根据您的有用评论并重新阅读我自己的错误消息,最终发现我已连接到不同的数据库。我一开始假设我创建的数据库是主数据库,因此注释没有意义。我还不知道“主”数据库是什么(默认?),但是将“更改连接”下拉列表更改为我的主数据库已经清除了大部分内容。不知道我一开始是如何改变它的,但现在我知道去那里看看。

我仍在努力理解架构,但至少我可以再次完成工作。

最佳答案

根据您的有用评论并重新阅读我自己的错误消息,最终发现我已连接到不同的数据库。我一开始以为我创建的数据库是主数据库,所以这个注释没有意义。

到目前为止,我一直在专门创建的数据库中工作,但没有意识到有一个主数据库,并且在 Azure Data Studio 中,我现在以某种方式连接到主数据库。这可能与我对模式创建的理解无关;我只是假设它们是相关的问题,因为它们是同时发生的。

为了解决这个问题,我将“更改连接”下拉列表更改为我的主数据库。之后,我可以再次创建、更新、删除等。

Azure Data Studio - Change Connection drop-down

关于sql-server - 如何以所有者和唯一用户的身份修复 Azure SQL Server 中的数据库权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69710248/

相关文章:

sql - 将行复制并粘贴到具有不同值的同一 SQL 表中

sql - 非常简单的 sybase sql 函数将无法工作

sql-server - 将 TSQL 中的字符串处理为带时区的日期时间

xml - SQL Server 查询返回 Xml 和 Html

api - 如何以编程方式从 Microsoft 翻译器获取剩余的翻译配额?

sql-server - 如何创建将运行位于特定文件夹中的 T-SQL 查询列表的 SSIS 包?

c# - 建立中央 SqlConnection 的最佳方式

sql-server - 由于登录失败,SQL Server 2012 无法启动

azure - 架构漂移未按预期 Azure DF 工作(2 种不同架构格式的多个文件)

azure - 将数据从 blob 存储复制到 sqlDatabase(到多个表中)