我正在进行数据库服务器迁移,但我不知道(在谷歌搜索和在这里搜索之后)如何使用psql命令行工具列出 PostgreSQL 上的数据库权限(或服务器上的所有权限)?
我在 Ubuntu 11.04 上,我的 PostgreSQL 版本是 8.2.x。
如何让 PostgreSQL 中的用户帐户能够创建和删除数据库?有没有办法做到这一点GRANT?
是否应该授予开发人员查询(SELECT/只读)生产数据库的权限?我之前工作的地方,开发团队有这个db_datareader角色;我现在工作的地方开发团队甚至无法连接到生产实例。
其中一个测试实例是每周一次从生产备份中恢复的生产副本,因此开发人员实际查看数据没有任何问题。
不允许开发人员查询生产(除了根本不希望他们有权读取敏感数据)有什么好的理由?
MySQL的SHOW GRANTS显示当前用户的权限。
有没有办法以root身份登录并显示所有用户的权限?
我想知道为什么允许新创建的用户在连接到数据库后创建表。我有一个数据库,project2_core:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+--------------+-----------+-------------+-------------+-------------------------------
postgres | postgres | SQL_ASCII | C | C |
project2_core | atm_project2 | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | project2=CTc/project2
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows) …Run Code Online (Sandbox Code Playgroud) 我想将一个相当简单的、内部的、数据库驱动的应用程序从 SQLite3 迁移到 PostgreSQL 9.3,并在执行过程中收紧数据库中的权限。
该应用程序当前包含一个用于更新数据的命令;和一个查询它。当然,我还需要以其他方式维护数据库(创建新表、视图、触发器等)。
虽然此应用程序一开始将是唯一托管在服务器上的应用程序,但我更愿意假设它将来可能会托管在具有其他数据库的服务器上,而不是在以后有必要时进行争夺未来。
我认为这些将是一组相当常见的要求,但我很难找到一个简单的教程来解释如何在 PostgreSQL 中设置一个新数据库,并使用这种用户/权限分离。参考资料详细介绍了组、用户、角色、数据库、模式和域;但我觉得他们很困惑。
这是我到目前为止尝试过的(从内部psql作为“postgres”):
CREATE DATABASE hostdb;
REVOKE ALL ON DATABASE hostdb FROM public;
\connect hostdb
CREATE SCHEMA hostdb;
CREATE USER hostdb_admin WITH PASSWORD 'youwish';
CREATE USER hostdb_mgr WITH PASSWORD 'youwish2';
CREATE USER hostdb_usr WITH PASSWORD 'youwish3';
GRANT ALL PRIVILEGES ON DATABASE hostdb TO hostdb_admin;
GRANT CONNECT ON DATABASE hostdb TO hostdb_mgr, hostdb_usr;
ALTER DEFAULT PRIVILEGES IN SCHEMA hostdb GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO hostdb_mgr;
ALTER DEFAULT PRIVILEGES …Run Code Online (Sandbox Code Playgroud) 我一定在设置 PostgreSQL 方面遗漏了一些东西。我想做的是创建多个相互隔离的数据库和用户,以便特定用户只能访问我指定的数据库。但是,据我所知,任何创建的用户都可以访问所有数据库,而无需获得任何特定授权。
这是我在 Ubuntu Server 12.04 上所做的:
似乎新用户“mike1”连接到数据库“data1”并创建表等没有问题。这根本没有运行任何 GRANT 命令(“data1”的所有者是“postgres”,因为我没有指定所有者在第 3 步)。这真的是它应该如何工作吗?
我想要做的是授予 mike1 对 data1 的完全访问权限,然后对更多用户和数据库重复此操作,确保用户只能访问我选择的一个(或可能几个)数据库。
今天在对服务代理问题进行故障排除时,我发现数据库所有者是离开公司的员工的 Windows 登录名。他的登录名已被删除,因此查询通知失败。
据说处理这个问题的最佳实践是让“sa”成为数据库所有者。我们更改了它并清除了队列。
我的(非常基本的)问题:数据库所有者是什么,其目的是什么?
当我运行 mysqldump 时,出现错误:
mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为它foobar是一台不再存在的旧机器。
如何将所有表的定义器更改为 'root'@'localhost'?
当谈到 SQL Sever 中的数据库权限管理领域时,我是非常绿色的。
让我们举一个简单的例子。
假设帐户“admin”是架构 A、B 和 C 的所有者。
还有另一个帐户“minion”,您希望对在模式 A、B 和 C 下创建的任何对象(表/视图)拥有完全权限(更新/删除/插入/选择/更改)。
这可能吗?还是每次在这些模式下添加表/视图时都必须执行授权语句?(对我来说似乎有点傻)。