首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库所有者的特权;应用程序用户

数据库所有者的特权;应用程序用户
EN

Database Administration用户
提问于 2014-04-02 19:04:37
回答 2查看 19.4K关注 0票数 18

快速版本:

我应该发出什么命令来使数据库所有者允许它访问这个数据库中的表,这可以从这个所有者的帐户中执行吗?

较长版本:

我正在创建一个基于RDS的数据库。我有一个'root‘用户,我已经配置了Amazon。

亚马逊会自动创建组角色'rds_superuser‘,这是一个特权很高的角色,但实际上不是超级用户。

我正在为应用程序创建一个数据库和用户,如下所示:

代码语言:javascript
运行
复制
create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;

\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;

我更新了这个脚本,以反映Craig关于我应该如何处理这个问题的建议。

当应用程序连接(使用master_application凭据)时,它会创建(因此拥有)表。

我的问题是我不能使用我的管理(rootish)登录来运行查询,因为该用户在表上没有特权。

我以前能够通过从应用程序帐户运行以下操作来解决这个问题:

代码语言:javascript
运行
复制
GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;

但是,让从属用户将privs授予管理用户似乎很麻烦。

在创建应用程序的表之前或之后可以运行一个命令,这将确保数据库的所有者可以访问数据库中的表?

在重新尝试alter特权后更新.

这仍然不允许访问这些表;我认为这是在其他地方提出的,这是完全有意义的,但它对我没有用。从psql壳:

代码语言:javascript
运行
复制
master_integration=> \ddp
                           Default access privileges
      Owner       | Schema | Type  |             Access privileges             
------------------+--------+-------+-------------------------------------------
 integration_root |        | table | integration_root=arwdDxt/integration_root+
                  |        |       | rds_superuser=arwdDxt/integration_root
(1 row)

master_integration=> \dp users
                           Access privileges
 Schema | Name  | Type  | Access privileges | Column access privileges 
--------+-------+-------+-------------------+--------------------------
 public | users | table |                   | 
(1 row)

integration_root是我的超级用户,用户是我的数据库中的一个表。

更新

我从亚马逊的某个人那里得到了一个相当无用的回复。

他们让我从master_application登录名调用ALTER权限。虽然这可能会起作用,但它不会回答我的问题(这就是如何使这种情况仅从rds_superuser帐户中实现)。

我要求他们澄清这件事,他们就走了。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2014-04-03 01:53:58

你想要ALTER DEFAULT PRIVILEGES

rds_superuser默认访问权限授予所有新表。

这只会影响在ALTER之后创建的表。对于现有表,必须具有GRANT权限。

票数 9
EN

Database Administration用户

发布于 2014-04-02 20:21:29

公共模式应该是所有用户都可以看到的。不应将公共架构的权限仅限于一个组。

因此,如果您不使用:

代码语言:javascript
运行
复制
GRANT ALL ON SCHEMA public TO GROUP rds_superuser WITH GRANT OPTION;

您可以安全地使用所有帐户的公共架构。

如果不希望特定帐户破坏公共模式表,则创建一个新角色(适用于应用程序的用户),并在公共模式中撤销该特定角色的权限。类似于:

代码语言:javascript
运行
复制
CREATE USER mywebuser WITH PASSWORD '*****';
REVOKE ALL PRIVILEGES ON SCHEMA public FROM mywebuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mywebuser; (or whatever rights you need to provide)

当你试着去做的时候,不是相反的方式。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/62381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档