GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
Run Code Online (Sandbox Code Playgroud)
readonly用户可以连接,查看表,但是当它尝试进行简单的选择时,它会获得:
ERROR: permission denied for relation mytable
SQL state: 42501
Run Code Online (Sandbox Code Playgroud)
这发生在PostgreSQL 9.1上
我做错了什么?
我的数据库 settings.py 看起来像:
ALLOWED_HOSTS = ['*']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'fishercoder',
'USER': 'fishercoderuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}
Run Code Online (Sandbox Code Playgroud)
我这样创建了一个名为“fishercoder”的新空数据库:
psql -U postgres
create database fishercoder;
ALTER USER postgres with password 'badpassword!';
CREATE USER fishercoderuser WITH PASSWORD 'password';
ALTER ROLE fishercoderuser SET client_encoding TO 'utf8';
ALTER ROLE fishercoderuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE fishercoderuser SET timezone TO 'PST8PDT';
GRANT ALL PRIVILEGES ON DATABASE fishercoder TO fishercoderuser;
Run Code Online (Sandbox Code Playgroud)
然后我通过运行以下命令成功地将其他 SQL 转储导入到这个新数据库中:psql -U postgres …
创建一个有三个用户的数据库并限制他们的权限(我只是大声思考,所以我的用户分离也可以纠正):
postgres超级用户适合我,所以这一个完成.首先,看看(通常很棒的)PostgreSQL文档,Grant上的页面几乎让我眼花缭乱.花了几个小时阅读有关PostgreSQL角色和特权的消息后,我常常感到困惑.我认为通过更多的工作,我将能够确定我想要的管理员用户,但我非常坚持"应用程序用户".我已经知道了这一点(命名和密码都只是占位符):
$ psql -U postgres
postgres=# CREATE USER "app-admin" WITH PASSWORD 'password';
CREATE ROLE
postgres=# CREATE USER "app-user" WITH PASSWORD 'password';
CREATE ROLE
postgres=# CREATE DATABASE "test-database" WITH OWNER "app-admin";
CREATE DATABASE
postgres=# \c "test-database"
You are now connected to database "test-database" as user "postgres".
test-database=# DROP SCHEMA "public";
DROP SCHEMA
test-database=# CREATE SCHEMA "app" AUTHORIZATION …Run Code Online (Sandbox Code Playgroud) database postgresql privileges web-applications least-privilege
我有一个需要允许SELECT访问数据库的用户。我遵循了我发现的所有指示,分散在整个SO中,我什么也无法工作。
我已经尝试了以下所有链接的所有建议解决方案:
错误:尝试将SELECT作为只读用户时,对Postgres上的关系表名的权限被拒绝
...以及更多有关PSQL文档,博客和用户组的参考。什么都没用。
这是我最近用作postgres用户授予权限的命令:
postgres@dev:~$ psql
psql (9.1.9)
Type "help" for help.
postgres=# grant usage on SCHEMA public to proton_read;
GRANT
postgres=# grant select on all tables in schema public to proton_read;
GRANT
postgres=# alter default privileges in schema public grant select on tables to proton_read;
ALTER DEFAULT PRIVILEGES
Run Code Online (Sandbox Code Playgroud)
以下是用作只读用户的命令:
proton_read@dev:~$ psql proton
psql (9.1.9)
Type "help" for help.
proton=> select * from leads_lead limit 1;
ERROR: permission denied for relation leads_lead
Run Code Online (Sandbox Code Playgroud)
这是踢球手,我曾经做过一次这项工作。我有一个示例数据库转储,用于向业务同事教授基本的SQL。我们覆盖简单的命令,如SELECT, …
在Heroku上尝试使用django迁移数据库更改时,我得到:
psycopg2.ProgrammingError: permission denied for relation django_migrations
Run Code Online (Sandbox Code Playgroud)
其他人已经能够通过授予适当的权限来解决此问题(例如,关系权限被拒绝).不幸的是,我无法在Heroku爱好层上授予权限或创建新用户.
我能够回滚一些迁移,但最终我得到了:
django.db.utils.ProgrammingError: table "labs_branch_tests" does not exist
Run Code Online (Sandbox Code Playgroud)
并且无法迁移回较新的迁移.
关于django_migrations关系的权限的完全回溯
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle
fake_initial=fake_initial,
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/executor.py", line 115, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/executor.py", …Run Code Online (Sandbox Code Playgroud)