Joe*_*app 22 sql database postgresql privileges
我正在从MySQL迁移到PostgreSQL并且已经打破了用户权限.我习惯使用以下命令为用户分配数据库的所有表的所有权限:
# MySQL
grant all privileges on mydatabase.* to 'myuser'@'localhost' identified by 'mypassword';
Run Code Online (Sandbox Code Playgroud)
在我看来,PostgreSQL 9.x解决方案涉及为"模式"分配权限,但我需要努力弄清楚究竟要发出什么SQL证明是过分的.我知道再花几个小时的研究会得出答案,但我认为每个从MySQL迁移到PostgreSQL的人都可以从网上至少有一个提供简单完整配方的页面中受益.这是我需要为用户发出的唯一命令.我宁愿不必为每个新表发出命令.
我不知道在PostgreSQL中必须以不同的方式处理哪些场景,所以我将列出我过去通常必须处理的一些场景.假设我们只想修改已创建的单个数据库的权限.
(1a)并非所有表都已创建,或(1b)表已经创建.
(2a)尚未创建用户,或(2b)已创建用户.
(3a)尚未将权限分配给用户,或者(3b)先前已将权限分配给用户.
(4a)用户只需要插入,更新,选择和删除行,或者(4b)用户还需要能够创建和删除表.
我已经看到了为所有数据库授予所有权限的答案,但这不是我想要的.拜托,我正在寻找一个简单的食谱,虽然我也不介意解释.
我不想授予所有用户和所有数据库的权限,因为这似乎是传统的快捷方式,因为当任何一个用户受到攻击时,该方法会破坏所有数据库.我托管多个数据库客户端并为每个客户端分配不同的登录.
看起来我还需要USAGE获得serial列的增加值的权限,但我必须以某种顺序授予它.我的问题变得更复杂了.
Erw*_*ter 52
角色是可以访问数据库集群中所有数据库的全局对象 - 具有所需的权限.
一个集群拥有许多数据库,持有许多模式.不同DB中的模式(甚至具有相同名称)是不相关的.授予模式的权限仅适用于当前数据库中的此特定模式(授予时的当前数据库).
public默认情况下,每个数据库都以模式开头.这是一个惯例,许多设置都以它开头.除此之外,架构public只是一个与其他架构一样的架构.
来自MySQL,您可能希望从单个模式开始public,有效地完全忽略模式层.我定期为每个数据库使用几十个模式.
模式在文件系统中有点(但不完全)类似于目录.
一旦您使用了多个模式,请务必了解search_path设置:
PostgreSQL为某些类型的对象授予默认权限
PUBLIC.PUBLIC默认情况下,不对表,列,模式或表空间授予任何权限.对于其他类型,默认权限授予PUBLIC如下:CONNECT和CREATE TEMP TABLE为数据库;EXECUTE职能特权; 和USAGE语言特权.
所有这些默认值都可以通过以下方式更改ALTER DEFAULT PRIVILEGES:
与@Craig评论一样,最好是GRANT授予组角色权限,然后创建该角色的特定用户成员(GRANT组角色为用户角色).这样,处理和撤销某些任务所需的特权束就更简单了.
组角色只是没有登录的另一个角色.添加登录名以将其转换为用户角色.更多:
比如,我们有一个新的数据库mydb,一个组mygrp和一个用户myusr......
虽然以超级用户身份连接到相关数据库(postgres例如):
REVOKE ALL ON DATABASE mydb FROM public; -- shut out the general public
GRANT CONNECT ON DATABASE mydb TO mygrp; -- since we revoked from public
GRANT USAGE ON SCHEMA public TO mygrp;
Run Code Online (Sandbox Code Playgroud)
a user all privileges to all tables像你写的那样分配(我可能更具限制性):
GRANT ALL ON ALL TABLES IN SCHEMA public TO mygrp;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO mygrp; -- don't forget those
Run Code Online (Sandbox Code Playgroud)
要为将来的对象设置默认权限,请为在此模式中创建对象的每个角色运行:
ALTER DEFAULT PRIVILEGES FOR ROLE myusr IN SCHEMA public
GRANT ALL ON TABLES TO mygrp;
ALTER DEFAULT PRIVILEGES FOR ROLE myusr IN SCHEMA public
GRANT ALL ON SEQUENCES TO mygrp;
-- more roles?
Run Code Online (Sandbox Code Playgroud)
现在,将该组授予用户:
GRANT mygrp TO myusr;
Run Code Online (Sandbox Code Playgroud)
相关回答:
来自MySQL,并且由于您希望保持数据库分离的权限,您可能会喜欢这种非标准设置db_user_namespace.每个文件:
此参数启用每个数据库的用户名.它默认是关闭的.
请仔细阅读本手册.我不使用此设置.它并没有使上述内容无效.
| 归档时间: |
|
| 查看次数: |
21539 次 |
| 最近记录: |