我试图在数据库中为用户设置权限,以便他们只能对地理表进行UPDATE,INSERT,DELETE和SELECT操作。
由于我为ID使用了一些SERIAL类型,因此,我什至不希望给用户提供手动编辑此字段的可能性。因此,我正在定义按列的特权。它在UPDATE部分工作正常,但QGIS中允许创建新对象的按钮保持灰色。似乎有效的唯一方法是当我未在特权定义中指定任何字段时。即使当我选择所有字段时,它也不起作用(即使我会认为不指定任何列并指定所有字段将是相同的)。
这似乎是我不了解的,或者特权定义中存在限制,无法在数据库和QGIS之间进行正确的交互。是否有人有任何信息或建议可以帮助我了解正在发生的事情,和/或(甚至更好)可以帮助我实现目标?
我总是可以通过在样式定义中将字段设置为不可编辑的方式来处理该问题,但是由于任何人都可以随意设置它,因此,我希望使用更安全的替代方法。
运行QGIS 2.14,适用于PostgreSQL 9.5的PostGIS 2.3。
您是否使用GRANT SQL命令设置用户权限(特权)?您是否已将INSERT插入桌上?
—
Zoltan
@Zoltan是的,我的查询看起来像是
—
GuiOm Clair
GRANT INSERT (col2, col3, col4) ON table TO users
应该具有INSERT权限的用户必须对主键列具有完全权限。否则,她将无法插入。我认为这没有任何办法。如前所述,您只能在QGIS中限制该列的可见性。
—
Micha
@Micha好吧,这样说的确很有意义……我想我也有另一种解决方法,即针对主键的列专用触发器ON INSERT DO NOTHING和ON UPDATE DO NOTHING会避免任何手动编辑主键。谢谢。
—
GuiOm Clair
或者,您可以创建表的视图(不包括SERIAL列),而仅授予对该视图的访问权限。
—
JoeBe's