我不是DBA,我对模式的访问控制有一些疑问。假设我有一个运行多个数据库的Postgres服务器。管理员用户是postgres。我有另一个用户tmpUser,我可以使用pgadmin3客户端登录到远程服务器。
我现在创建一个名为myDatabase的数据库,默认情况下由postgres用户拥有。然后我使用我的管理客户端使用tmpUser帐户远程登录到此myDatabase。
我现在在myDatabase中创建一个名为myDbSchema的新架构。我创建了一个名为myDbRole的新角色,并使用了一个授权,将myDatabase,myDbSchema全部授予myDbRole。
现在的问题是我应该如何控制对此myDatabase的访问。我尝试使用tmpUser登录到远程服务器,当我尝试执行select * from myTable
myTable是myDatabase中的表时,它返回了一个权限被拒绝的sql消息。所以我将表的所有者更改为tmpUser,我真的不想这样做!
是否有关于如何在postgres中创建和组织模式角色的指南或内容?
答案 0 :(得分:1)
您的问题是什么并不完全清楚(例如,角色“myDbRole”是什么,是组角色(NOLOGIN
)还是用户角色(LOGIN
)?)但是一般来说,您可以遵循这种权限管理模式:
NOLOGIN
)。不要使用postgres
用户;如果您需要经常以该角色身份登录以进行常规数据库工作,那么您做错了什么。任何超级用户(或授予该角色的其他用户角色)都可以使用SET SESSION AUTHORIZATION
“模拟”该所有者角色进行必要的维护。在生产环境中,这几乎不需要;在开发过程中,您可能需要考虑以LOGIN
权限使用该角色以便于使用。sales_staff
,product_managers
,accounting
和senior_management
,或web_user
,web_admin
,{{1} }和app_developer
用于网站。然后,数据库所有者GRANT
根据需要访问数据库(app_manager
),模式(CONNECT
),表,视图和函数(USAGE
)。出于安全原因,我通常EXECUTE
。REVOKE ALL ON FUNCTION x() TO public
。用户角色应具有GRANT sales_staff TO jane
,以便他们可以登录并继承他们所属的组角色的权限。这包括连接数据库的权限和模式的使用权限。请注意,单个用户角色可以拥有多个组角色的成员身份。最后,更新您的LOGIN INHERIT
文件以启用对数据库的远程访问。