Kuk*_*ula 17 python postgresql permissions sqlalchemy
我已经阅读了 20 多个关于同一问题的不同问题 - 并且建议的答案并没有解决我的问题。我还在得到sqlalchemy psycopg2.errors.InsufficientPrivilege: permission denied for relation <<table>>
环境:EC2、debian 8、postgresql、flask、sqlalchemy 我在 postgresql 中的表:
Create table Members(
id BIGSERIAL PRIMARY KEY,
joinDate TIMESTAMPTZ DEFAULT Now(),
password TEXT NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
直接在 postgresql 中:INSERT INTO members (password) VALUES('123') RETURNING id;完美运行
我已授予我的用户所有可能的授权
grant all privileges on database <my_db> to <my_user>
grant all privileges on all table in schema public to <my_user>
grant all privileges on all relations in schema public to <my_user>
Run Code Online (Sandbox Code Playgroud)
我还在下面创建了一个.htaccess文件var/www/htmlHeader set Access-Control-Allow-Origin "*"
我的表用 sqlalchemy 映射member.py
from datetime import datetime
from sqlalchemy import create_engine, Column, String, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from marshmallow import Schema, fields
from sqlalchemy.schema import UniqueConstraint
import sqlalchemy as sa
Engine = create_engine('postgresql://<my_user>:<my_psw>@<my_db_url>/<my_dn_name>')
Session = sessionmaker(bind=Engine)
Base = declarative_base()
class MemberSchema(Schema):
id = fields.Number()
password = fields.Str()
class Member(Base):
__tablename__ = 'members'
id = Column(Integer, primary_key=True)
password = Column(String)
def __init__(self, password):
self.password = password
Run Code Online (Sandbox Code Playgroud)
接收 POST 并执行插入操作的代码test.py:
from flask import Flask, render_template, request,jsonify
from flask_cors import CORS, cross_origin
import logging
def register_member(password):
session = Session()
newMember = Member(password)
session.add(newMember)
session.commit()
return newMember
app = Flask(__name__)
cors = CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'
@app.route("/register", methods=["GET", "POST"])
@cross_origin()
def register():
try:
formData = request.form
register_member(formData['password'])
return jsonify({"message":"Regsitrated successfully!"})
except Exception as ex:
logging.debug(ex)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=1234, debug=True)
Run Code Online (Sandbox Code Playgroud)
执行此代码会导致异常并出现这些错误
DEBUG:root:(psycopg2.errors.InsufficientPrivilege) permission denied for relation members
[SQL: INSERT INTO members (password) VALUES (%(password)s) RETURNING members.id]
[parameters: {'password': '4444'}]
Run Code Online (Sandbox Code Playgroud)
和
TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激
Ed *_*pel 13
不确定您是否使用psql或进行手动测试pgAdmin,但请确保您使用代码中使用的相同帐户进行测试。
即使用户有权访问模式中的表/关系,他们也需要访问模式本身:
grant usage on schema public to <myuser>
另外,我注意到BIGSERIAL它的使用涉及一个序列。您可能需要一个grant usage on all sequences in schema public to <myuser>.
PostgreSQL 数据库中似乎有多层权限。如果一层缺少权限,查询就会失败。
GRANT ALL PRIVILEGES ON DATABASE thedatabse TO theotheruser;对于第 2-4 层,它取决于数据库的结构,但无论结构如何,都将涉及大量键入和/或单击以更改每个层中每个项目的权限或复杂的查询。
| 归档时间: |
|
| 查看次数: |
33674 次 |
| 最近记录: |