PG :: InsufficientPrivilege:错误:关系schema_migrations的权限被拒绝rake db:create

kho*_*mle 15 ruby postgresql ruby-on-rails

我正在尝试在Rails中创建数据库.在postgres中我看到了开发和测试数据库,但是我收到了权限错误.我试过按照这个链接,对我不起作用.

错误: PG::InsufficientPrivilege: ERROR: permission denied for relation schema_migrations : SELECT "schema_migrations".* FROM "schema_migrations"

Rails:关系schema_migrations的权限被拒绝

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  host: localhost
  username: root
  password:

development:
  <<: *default
  database: svp-chicago_development
Run Code Online (Sandbox Code Playgroud)

我登录postgres并执行了这些命令.

psql postgres
CREATE USER root
CREATE DATABASE svp-chicago_development
GRANT ALL PRIVILEGES ON DATABASE svp-chicago_development to root
ALTER DATABASE svp-chicago_development OWNER TO root
Run Code Online (Sandbox Code Playgroud)

当我这样做时,\list我看到数据库在那里.

ohk*_*s11 33

我有同样的问题,我通过在角色中添加"超级用户"来解决.

首先,列出用户及其权限.如果您按照上述命令操作,则root用户不具有"超级用户"属性.

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 other     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      |                                                            | {}
Run Code Online (Sandbox Code Playgroud)

接下来,将root升级为"超级用户".

postgres=# ALTER USER root WITH SUPERUSER;
ALTER ROLE
Run Code Online (Sandbox Code Playgroud)

再次列出用户及其权限.现在root有"超级用户".

postgres=# \du
                               List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 other     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      | Superuser                                                  | {}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 注意:此解决方法是[危险](https://www.postgresql.org/docs/10/role-attributes.html),应谨慎使用。 (3认同)

Pro*_*ton 14

我在使用 PostgreSQL 开发 Rails 6 应用程序时遇到了这个问题。

第一个检查是确保您已将数据库的所有权限授予您想要使用的特定用户:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myusername;
Run Code Online (Sandbox Code Playgroud)

但就我自己而言,问题的原因是我创建了一个数据库,然后将所有权限授予了特定用户。一段时间后,我向另一个用户授予了权限s使用GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myusername;

因此,即使我向第二个用户授予了所有权限,它也无权对数据库表执行操作。

这是我修复它的方法

登录存储数据库的PostgreSQL控制台:

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

列出该 PostgreSQL 数据库服务器中的所有数据库:

\l
Run Code Online (Sandbox Code Playgroud)

或者

\list
Run Code Online (Sandbox Code Playgroud)

连接到要修复其权限的数据库:

\c mydatabase
Run Code Online (Sandbox Code Playgroud)

或者

\connect mydatabase
Run Code Online (Sandbox Code Playgroud)

使用以下命令列出当前数据库中的所有表search_path

\dt
Run Code Online (Sandbox Code Playgroud)

或者

列出当前数据库中的所有表,无论您的search_path

\dt *.
Run Code Online (Sandbox Code Playgroud)

您会注意到,这些表仍然引用首字母userrole作为owner

现在您必须修改表以引用新的userrole作为owner.

您可以使用以下命令单独修改每个表:

ALTER TABLE table_name OWNER TO new_owner;
Run Code Online (Sandbox Code Playgroud)

这不需要指定old_owner. 当用户是postgres(默认数据库用户)并且您想要将所有者修改为新用户时,这一点至关重要。

或者使用以下命令同时修改所有表:

REASSIGN OWNED BY old_owner TO new_owner;
Run Code Online (Sandbox Code Playgroud)

这需要指定old_owner. 当您已将用户从postgres(默认数据库用户)修改为另一个用户并且想要将所有者修改为新用户时,这一点至关重要。

注意:确保您已连接到要修改权限的数据库,否则可能会遇到错误。


Ste*_*eve 10

另外,如果您使用 Heroku 这样的服务,则值得检查一下是否超出了行限制并且数据库中的写访问权限已被撤销。

您可以通过转到仪表板,单击应用程序,单击 postgres 服务图标,然后检查行限制来完成此操作。


Kha*_*ham 8

我想你错过了password为你创造的user.尝试创建密码如下:

CREATE USER root WITH PASSWORD 'your_new_password';
CREATE DATABASE svp-chicago_development;
GRANT ALL PRIVILEGES ON DATABASE svp-chicago_development to root;
ALTER DATABASE svp-chicago_development OWNER TO root;
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

19519 次

最近记录:

6 年,3 月 前