【问题标题】:SQL SERVER: Allow a user to create/alter/drop tables within own schema onlySQL SERVER:仅允许用户在自己的架构中创建/更改/删除表
【发布时间】:2019-09-05 15:48:11
【问题描述】:

我目前正在构建一个解决方案,其中多个小型应用程序运行单个 SQL 服务器数据库,每个数据库都有自己的登录名和默认架构。此解决方案工作正常,但我需要确保安全。应用程序有一个“设计器”元素,我需要仅将创建/更改/删除表权限授予默认模式。

我在网上找到了一些解决方案,但在测试过程中没有一个真正适合我。

我在 Azure 上运行 sql server 12.0。我用它的模式“DemoApp”创建了一个用户“DemoApp”

解决方案1:将用户设置为架构的所有者,并限制对架构外的选择等的访问,但由于ALTER权限,用户可以删除/更改其他架构的表。

ALTER AUTHORIZATION ON SCHEMA::DemoApp to DemoApp;
GRANT CREATE TABLE, ALTER TO DemoApp;

解决方案 2:将架构的所有者更改为 dbo,并且只允许架构内的特定权限。

ALTER AUTHORIZATION ON SCHEMA::DemoApp to dbo;
GRANT CREATE TABLE TO DemoApp;
GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW DEFINITION ON SCHEMA::DemoApp TO DemoApp

根据在线帖子,这个解决方案应该可以工作,但我仍然得到 尝试在 DemoApp 登录下创建表时出现“数据库中的 CREATE TABLE 权限被拒绝”。

我想在单个数据库上安全地运行多个应用程序,其中每个登录名/用户都被限制在其默认架构中,并完全控制其中的对象。

任何建议将不胜感激。提前致谢。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    切勿授予非管理员在 dbo 拥有的架构中创建或修改对象的能力。 这是完全不安全的。

    这应该可行。您根本不授予 ALTER。 DemoApp 是架构的所有者,并且可以删除或更改该架构中的对象:

    ALTER AUTHORIZATION ON SCHEMA::DemoApp to DemoApp;
    GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO DemoApp;
    

    【讨论】:

    • 我仍然得到“数据库中的 CREATE TABLE 权限被拒绝”。由于某种原因,没有 ALTER 权限创建表不起作用 GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, ALTER TO DemoApp;允许 DemoApp 创建表,但这会引发我试图避免的不安全问题。
    • CREATE TABLE 不允许用户在每个模式中创建表,只有他们可以 ALTER 或他们拥有的表。
    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多