我正在为内部仪表板创建一个 PostgreSQL 用户,我希望用户对数据库的访问默认为只读。
我做了一些研究,创建一个只读用户似乎有点复杂,该用户还继承了对任何新表、物化视图等的访问权限。
所以我认为最简单的事情就是设置:
ALTER USER readuser SET default_transaction_read_only = on;
Run Code Online (Sandbox Code Playgroud)
如何使用 Ansible PostgreSQL 模块进行设置?
我不确定是否应该使用postgresql_privsorpostgresql_user模块。我尝试为该priv属性尝试不同的值,但没有任何效果。
我知道这不能保证只读,因为用户可以在运行时更改事务类型。但是,这对我的用例来说很好,因为安全性不是问题,我只想防止无知的用户意外修改数据。如果有人有足够的知识来改变他们的交易,我宁愿假设他们知道他们在做什么并且有合理的理由。
此示例显示如何将其与"非声明性"一起使用 - http://docs.sqlalchemy.org/en/latest/core/ddl.html#sqlalchemy.schema.DDL
如何将其与ORM声明性语法一起使用?
例如,使用此结构:
Base = declarative_base(bind=engine)
class TableXYZ(Base):
__tablename__ = 'tablexyz'
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用flask-uploads扩展上传文件。问题是,每次似乎我找到解决方案时,我都会资助另一个问题,而且我觉得文档很神秘。
这是代码:
from flask.ext.uploads import UploadSet, IMAGES, configure_uploads
import os
from werkzeug import secure_filename
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
@app.route('/edit_book', methods = ['GET', 'POST'])
def edit_book():
form = BookForm()
if form.validate_on_submit():
b.summary = form.summary.data
if request.method == 'POST':
try:
secure_filename = photos.save(request.files['cover'])
except:
print 'not ok'
db.session.add(b)
db.session.commit()
return redirect('/admin')
return render_template('edit_book.html', title = 'Add a book', form = form )
Run Code Online (Sandbox Code Playgroud)
当前错误仅给出:
KeyError: 'images'.
Run Code Online (Sandbox Code Playgroud)
我什么都没有了!使用此扩展是否有任何问题,因为我在任何地方都找不到合适的代码来提供完整的解决方案(从上传开始到将文件保存在文件夹中)。
预先感谢您的帮助。
<!-- extend from admin layout -->
{% extends "admin.html" %} …Run Code Online (Sandbox Code Playgroud) 我正在尝试决定如何在我的烧瓶应用程序上实现图像上传功能.我目前正在使用Flask-Uploads来完成工作,它看起来效果很好.但是,我不知道它是否非常安全,这可能是一个巨大的问题,因为涉及文件上传.Flask-Uploads并没有提供有关其服务实施的详细信息,因此我没有通过查看文档获得任何见解.但是,我在Flask的官方文档中看到它们包含了一个使用Werkzeug的文件上传示例,它似乎有一些额外的方法用于文件安全性.我似乎无法在网上找到任何有关哪一个更安全的信息.有没有人在这里有更多的网络安全经验曾经检查过这些替代方案中的一个或两个,并在这个问题上得出明确的结论?
我需要对messageMySQL 表中命名的列运行正则表达式查找和替换post。
我的数据库正在运行 MariaDB 10。
根据docs,MariaDB 10 有一个新REGEXP_REPLACE函数专门用于执行此操作,但我似乎无法弄清楚实际的语法。
它将影响 280,000 行,因此理想情况下,还有一种方法可以将其限制为在我测试时一次仅更改一个特定行,或者只是执行 aSELECT而不是 anUPDATE直到我确定它可以满足我的要求。
我想运行的正则表达式:
\[quote\sauthor=(.+)\slink=[^\]]+]
替换字符串:
[quote="$1"]
以下是我尝试过的,但它只是抛出一个 SQL 错误:
UPDATE post SET message = REGEXP_REPLACE(message, '\[quote\sauthor=(.+)\slink=[^\]]+]', '[quote="$1"]') WHERE post_id = 12
在这种情况下,原始消息是:
[quote author=Jon_doe link=board=2;threadid=125;start=40#msg1206 date=1065088]最终结果应该是[quote="Jon_doe"]
使这项REGEXP_REPLACE工作的正确语法是什么?
我在 Flask 应用程序中使用Flask Uploads作为上传表单。但是,每当我尝试保存文件时,都会收到此错误:
File "/Users/Documents/virtual_environment/bin/../lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/app'
Run Code Online (Sandbox Code Playgroud)
上传似乎没有保存文件所需的权限?这是我用于烧瓶上传的配置:
UPLOADS_DEFAULT_URL = os.environ.get("UPLOADS_URL", "http://localhost:5000/")
UPLOADS_DEFAULT_DEST = "/app/uploads/"
UPLOAD_EXTENSIONS = set(["csv", "xls", "xsls"])
Run Code Online (Sandbox Code Playgroud)
另外,这是我保存实际文件的方法:
@app.route('/upload', methods = ['GET', 'POST'])
@app.route('/upload/', methods = ['GET', 'POST'])
@roles_accepted('admin', 'team')
def r_upload():
form = FileUploadForm()
if form.validate_on_submit():
filename = uploadSet.save(form.uploadfile.data)
url = uploadSet.url(filename)
flash("%s uploaded <a href=\'%s\'>HERE</a>!" % (filename, url))
return render_template('/uploads.html',
dashboard_title = "%s Uploads" % g.name,
form = form)
Run Code Online (Sandbox Code Playgroud)
该错误是由保存行引起的。对于如何解决这个问题,有任何的建议吗?谢谢。
我正在调试一个python脚本,我想看一个变量,并在其值发生变化时得到通知.
有没有办法做到这一点pudb?
Zookeeper临时节点是否写入磁盘?
我知道普通的 Zookeeper 节点会在 Zookeeper 确认对客户端的写入之前写入磁盘。
但是,临时节点仅在客户端会话期间持续存在,因此如果 Zookeeper 节点全部崩溃,那么根据定义,客户端会话就会中断。因此不需要写入磁盘,因为当整体重新启动时不会重新创建临时节点。所以从理论上讲,临时节点似乎只需要存储在内存中。
这是如何实施的?
我有一个sqlalchemy(实际上是Flask-sqlalchemy因此所有的数据库.*),我希望能够通过他们与之相关的"投票"的平均投票价值来排序我的"事物".投票的值为0到100.
遇到sqlalchemy想将average_vote_value @attribute翻译成sql并且失败的问题我发现我应该使用hybrids:
但是,我无法弄清楚在这种情况下如何做到这一点.有人可以帮忙吗?
class Thing(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
votes = db.relationship('Vote', backref='thing', lazy='dynamic')
@hybrid_property
def average_vote_value(self):
'''average of vote.values'''
values = [v.value for v in self.votes]
try:
return sum(scores) / len(values)
except ZeroDivisionError:
return 50 # the default value
average_vote_value.expression
def average_vote_value(cls):
pass ### help ###
class Vote(db.Model):
id = db.Column(db.Integer, primary_key=True)
thing_id = db.Column(db.Integer, db.ForeignKey('thing.id'))
value = db.Column(db.Float, default=50.0)
Run Code Online (Sandbox Code Playgroud) 我正在使用Flask和SQLAlchemy(通过Flask-SQLAlchemy扩展)和Factory_Boy.
我的GearItem模型有一个外键GearCategory.Factory_Boy通过SubFactory创建要在原始工厂中用作外键的对象的函数来处理此问题.
以下是我的模型定义:
class GearCategory(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text, unique=True, nullable=False)
gear_items = db.relationship('GearItem', backref='category',
lazy='dynamic', order_by='GearItem.name')
class GearItem(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text, nullable=False, index=True)
category_id = db.Column(db.Integer, db.ForeignKey('gear_category.id'), index=True)
Run Code Online (Sandbox Code Playgroud)
这是我的factory_boy Factory定义:
class GearCategoryFactory(BaseFactory): # Based on factory.alchemy.SQLAlchemyModelFactory
class Meta:
model = gear_models.GearCategory
name = factory.LazyAttribute(lambda n: faker.word())
class GearItemFactory(BaseFactory):
class Meta:
model = gear_models.GearItem
name = factory.LazyAttribute(lambda n: faker.word())
category_id = factory.SubFactory(GearCategoryFactory) …Run Code Online (Sandbox Code Playgroud) python ×5
flask ×3
sqlalchemy ×3
file-upload ×2
ansible ×1
ansible-2.x ×1
declarative ×1
factory-boy ×1
hybrid ×1
mariadb ×1
mysql ×1
pcre ×1
postgresql ×1
pudb ×1
regex ×1
security ×1
werkzeug ×1