postgresql - PostgreSQL:仅在一个数据库中授予 CRUD 操作
问题描述
有没有办法仅在特定数据库上向用户授予 CRUD 操作?假设我的服务器上有 2 个数据库:database_allowed
和database_forbiden
我在 postgreSQL 上创建了一个用户,并授予了以下权限:
CREATE ROLE crud_user LOGIN PASSWORD '###';
--Next commands are executed connected to the database
GRANT CONNECT ON DATABASE database_allowed TO crud_user ;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO crud_user;
但是,执行命令后,我只得到一个错误:
致命:不允许角色“crud_user”登录
我知道我可以执行: ALTER ROLE crud_user WITH LOGIN
,但是,尽管用户只能在 上执行 CRUD 操作database_allowed
,但他可以连接两者,并查看表名等...
有没有办法阻止在所有数据库上授予登录权限?
解决方案
crud_user
由于其权限,您可以访问其他数据库PUBLIC
:
PUBLIC
PostgreSQL在创建对象时默认授予对某些类型对象的权限。PUBLIC
默认情况下,不对表、表列、序列、外部数据包装器、外部服务器、大型对象、模式或表空间授予任何权限。对于其他类型的对象,默认授予的权限PUBLIC
如下:CONNECT
和TEMPORARY
(创建临时表)数据库权限;EXECUTE
功能和程序的特权;语言和USAGE
数据类型(包括域)的特权。当然,对象所有者REVOKE
既可以默认也可以明确授予权限。
所以你会想跑
REVOKE CONNECT ON DATABASE database_forbidden FROM PUBLIC
推荐阅读
- progressive-web-apps - PWA Offline 无法在 Google Chrome 上运行,但在 Firefox 和 Safari 上运行良好
- c# - 从数组中删除零(空格)
- json - 更改杰克逊输出中的数字格式
- azure-data-factory - 可能在 Azure 数据工厂中添加 3 个 If Condition 结果?
- reactjs - 使用 react Slate/Plate 强制执行第一行字符限制
- python - os.path.exists 对某些路径返回 false
- python - 将 FastAPI 和应用程序与多个选项相结合
- python - 根据与特定点的距离对 3D 边界框进行排序
- javascript - 如何将元组的python列表转换为JavaScript中的数组?
- python - TypeError:gmw() 得到了一个意外的关键字参数“dtype”