我尝试在Rails中创建数据库。在Postgres中,我看到了开发和测试数据库,但是,我得到了一个权限错误。我试着跟随这个链接,对我不起作用。
错误:PG::InsufficientPrivilege: ERROR: permission denied for relation schema_migrations : SELECT "schema_migrations".* FROM "schema_migrations"
Rails: permission denied for relation schema_migrations
default: &default
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
username: root
password:
development:
<<: *default
database: svp-chicago_development
我登录到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
当我执行\list
时,我看到数据库在那里。
9条答案
按热度按时间64jmpszr1#
我遇到了同样的问题,我通过向角色中添加“超级用户”来解决。
首先,列出使用者及其权限。如果您遵循上述指令,root使用者就没有“超级使用者”属性。
下一步,将root升级为“超级用户”。
再次列出用户及其权限。现在root拥有“超级用户”。
希望能有所帮助。
hrirmatl2#
我猜你错过了为你的
user
创建password
。尝试如下创建密码:bwntbbo33#
我在使用PostgreSQL开发Rails 6应用程序时遇到了这个问题。
第一项检查是确保已将数据库的所有权限授予要使用的特定用户:
但在我自己的案例中,问题的原因是我创建了一个数据库,然后将所有权限授予了一个特定的用户。一段时间后,我使用
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myusername;
将权限授予了另一个用户因此,第二个用户即使我授予了它所有权限,也没有权限对数据库表执行操作。
以下是我的修正方法:
登录到存储数据库的PostgreSQL控制台:
列出PostgreSQL数据库服务器中所有数据库:
或
连接到要修复其权限的数据库:
或
使用
search_path
列出当前数据库中的所有表:或
列出当前数据库中的所有表,而不考虑您的
search_path
:您会注意到,这些表仍然将初始的
user
或role
引用为owner
。现在,您必须修改这些表,以将新的
user
或role
引用为owner
。您可以使用以下命令分别修改每个表:
这不需要指定
old_owner
。当用户是postgres
(默认数据库用户)并且您要将所有者修改为新用户时,这一点很重要。或使用以下命令同时修改所有表:
这需要指定
old_owner
。当您已经将使用者从postgres
(预设数据库使用者)修改为其他使用者,而且想要将拥有者修改为新的使用者时,这是必要的。注意:请确保已连接到要修改其特权/权限的数据库,否则可能会出错。
frebpwbc4#
此外,如果您使用的是Heroku这样的服务,则值得检查一下您是否超出了行限制,以及数据库中的写访问权限是否已被撤销。
你可以通过进入 Jmeter 板,点击应用程序,点击postgres服务图标,然后检查行限制来完成。
ct2axkht5#
以防万一有人来这里与同样的问题,我确实尝试了许多其他的解决方案,其中一个最适合我的是以下:在PostgreSQL中同时修改所有表的OWNER
root
或postgres
)具有Superuser
权限,因此在尝试分配system
对象时,尝试REASSIGN OWNED会出现错误mwg9r5ms6#
试着列出您的表以查看谁是所有者。在我的例子中,我通过
psql < dump.sql
导入了数据,所有导入的表都由postgres
而不是我的用户拥有。要对此进行检查,请启动
psql
并在数据库中输入命令\dt
。不好!它属于
postgres
,您需要修复它:1.您可以在此处使用@ddreliv的solution重新分配每个表的所有者,或者
1.如果有转储,只需删除数据库,然后使用正确的用户重新导入它。例如,使用
sudo -u my_user psql < dump.sql
而不是sudo -u postgres psql < dump.sql
。z9ju0rcb7#
以下是我如何修复它:
登录到存储数据库的PostgreSQL控制台:
sudo -u postgres psql列出PostgreSQL数据库服务器中所有数据库:
\l
或
\list连接到要修复其权限的数据库:
\c我的数据库
或
\连接mydatabase
使用search_path列出当前数据库中的所有表:
日期
或
列出当前数据库中的所有表,而不考虑search_path:
\dt * 中指定的值。
然后给特权表:-
一个表
将TABLE side_adzone上的所有权限授予jerry;
方案的所有表
将公用方案中所有表的所有权限授予Jerry;
kb5ga3dv8#
(使用docker-compose)
删除postgres数据
然后在docker-compose.yml中将postgres从11.11降级到11.8
最后再次启动postgres Docker
问题解决了。
guz6ccqo9#
将“Superuser”添加到角色是一个安全问题,超级用户不仅可以删除OP指出的svp-chicago_development数据库,还可以删除任何其他存在的数据库。
我相信OP的问题与@kevin-cooper指出的表所有者有关。
即使OP执行了他所说的授予数据库所有权限和所有者的命令,如果OP仍然使用postgres凭据运行任何表创建或恢复转储,数据库svp-chicago_development上的表将以postgres作为所有者,如果应用程序以其他用户/角色运行,则将引发OP提到的错误。
您可以通过以下方法检查psql中是否存在这种情况:
然后列出表:
它将显示如下内容:
如果有几行,则可以通过运行以下命令手动更改每行的所有者:
如果您正在运行pg_restore,请确保传递**--role**,这样对象将由指定的角色拥有。