我试图build立一个每个用户都有一个PostgreSQL数据库的系统,一个关联账户的PHP-FPM资源池。 我需要将数据库的所有权限授予其他用户,但似乎只能对表执行此操作。
我试过了
将数据库用户名的所有权限授予username_shadow
但是这只给予有限的特权。
我已经升级到PGSQL 9.2,它能够在模式上授予权限,但是我不能得到有用的结果。 我如何简单地让另一个用户具有第一个在同一个数据库上的所有权限?
不要试图重复这样的权利,这将成为一个pipe理的噩梦。 使用angular色和inheritance。
相反,创build一个ROLE (组),并使两个用户成员的angular色。 为所有必需的对象授予所需的权利和所有权,用户将自动inheritance这些访问权限。
要进行转换,可以:
将现有用户转换为共享angular色,方法是重命名并删除其LOGIN权限,将其从loginangular色(用户)转换为非loginangular色(组),然后以原始名称创build新用户; 要么
手动授予新angular色所有必需的权限,使用GRANT ... ON DATABASE , GRANT ... ON SCHEMA , GRANT ... ON ALL TABLES IN SCHEMA等
这是第一种方法的演示。 假设我们有一个名为test的原始用户,并拥有一张表的所有权和其他一些权限:
regress=# CREATE USER test WITH PASSWORD 'original user pw'; CREATE ROLE regress=# CREATE TABLE testtab(x integer); CREATE TABLE regress=# ALTER TABLE testtab OWNER TO test; ALTER TABLE
我们可以将其转换为共享angular色,并创build一个具有相同名称的新用户:
regress=# ALTER ROLE test RENAME TO test_group; NOTICE: MD5 password cleared because of role rename ALTER ROLE regress=# ALTER ROLE test_group NOLOGIN; ALTER ROLE regress=# CREATE USER test IN GROUP test_group PASSWORD 'original user pw'; CREATE ROLE
只要你设置了相同的密码,用户就不会注意到这个区别。
现在,您可以创build一个新用户并将其添加到同一个angular色中,使其具有与原始test用户在将其转换为angular色test_group之前相同的访问权限。 在这种情况下,我使用创build用户的独立步骤,然后授予他们angular色成员身份; 效果和上面一样,我只是告诉你两种不同的方式来做到这一点:
regress=# CREATE USER newuser PASSWORD 'fred'; CREATE ROLE regress=# GRANT test_group TO newuser; GRANT ROLE
现在, newuser可以SELECT * FROM testtab即使testtab属于用户test ,并且没有GRANT允许其他用户访问它。