【发布时间】:2021-10-11 10:00:33
【问题描述】:
我的 SQL Server 数据库的新用户的权限存在很大问题。新用户看不到任何表,但仍可以删除它们或创建新表。
创建用户的代码:
--Code Start
--This is how I instantiate the new user:
CREATE LOGIN userName WITH PASSWORD 'password';
CREATE USER userName FOR LOGIN userName;
--Furthermore, the user get some roles. So that the user can do at least something:
CREATE ROLE roleExample;
GRANT DELETE, INSERT, SELECT, UPDATE ON dbo.exampleTable TO roleExample;
SP_ADDROLEMEMBER roleExample, userName;
--Code End
在我看来,新用户现在应该只能对 exampleTable 进行操作。但正如我所说,用户也可以创建和删除表。
这就是为什么,我给角色添加了一些约束,新用户得到:
DENY CREATE TABLE TO roleExample AS dbo;
这也无济于事。用户仍然可以在 dbo 中创建表。
这个问题是顺便说一句。与特定架构无关。新用户可以在任何架构中创建和删除表。
我猜默认允许新用户创建或删除表。可悲的是,我不知道如何改变它。
希望你们能帮帮我。
附件是一个示例,您可以在其中看到用户不知道架构,应该在其中创建新表。尽管如此,模式仍然存在,并且在执行此语句后,将创建表。错误消息只是说这个表已经创建,因为我执行了这个语句两次。尽管如此,用户还是无法在 SQL Server Management Studio 中看到自己创建的表。
User does not know schema, but still can create tables in it
【问题讨论】:
-
我认为您的 [guest] 帐户或数据库的安全设置有问题。虽然这个问题在这里是允许的,但在这种情况下,我认为你会在dba.stackexchange.com得到更好的答案。
-
检查您的 SQL Server 版本是否有最新的 Service Pack 或累积更新,如果没有,请更新:sqlserverbuilds.blogspot.com
-
好的,我有点生疏了,但很可能有人已将这些权限授予您数据库中的
Public角色。所以你可能想看看那里。 -
“不知道架构”的事情很可能就像智能感知在创建新对象时不会自动刷新一样。除非您刷新了智能感知缓存,否则您无法将任何内容读入那里的红色波浪线
-
@RBarryYoung 这听起来像是一个可能的解决方案。希望下周我能找到答案。可悲的是,我这周没有时间了……