以PostgreSQL为例设置用户权限
作为一款数据可视化软件,用户更多的是利用Redash中文版来查找分析数据源,而不需要编辑变更数据内容,在建立数据源时,配置一个带有权限控制的数据库用户,能更好地保障数据安全,避免用户误操作导致丢失数据。下面以PostgreSQL数据源为例,演示如何配置只读数据模式。
首先创建一个新数据库命名为business,拥有者为admin,数据库中建立三个表Employees,jobs和customers,并填入数据。数据库管理员能控制公共用户的所有权限,直接撤消公共角色的权限会影响当前所有用户和角色。因此在实际架构中,处理方式一般是在数据库中设置一部分只读权限的角色,同时系统也保留其他不同权限的角色。
1、建立只读角色 readonly
CREATE ROLE readonly;
GRANT CONNECT ON DATABASE defaultbusiness TO readonly;
GRANT USAGE ON SCHEMA business TO readonly;
在PostgreSQL的操作中,在PostgreSQL的操作中,配置只允许访问usage模式中包含的对象,因此只读模式中查找功能将不受影响。
2、授予新角色权限
GRANT SELECT ON TABLE "business"."employees" TO readonly;
GRANT SELECT ON TABLE "business"."jobs" TO readonly;
GRANT SELECT (id, name) ON TABLE business.customers TO readonly;
前两条语句是对employees和jobs表赋予完全读取权限。
第三条语句限制readonly角色仅能查看customers表的ID和姓名,表中的所有其他字段均被隐藏,customers其他信息字段数据只能由管理员查看,这样可确保系统中其他的用户不会有意地看到该数据。如果用户尝试执行SELECT * FROM business,数据库将引发权限错误,只有查询ID和名称字段能显示出来。
3、在数据库中创建名为redash_user的只读用户,用于连接到Redash中文版
CREATE USER redash_user WITH PASSWORD 'secret';
GRANT readonly TO redash_user;
添加数据源时设置界面需要填写用户名redash_user,“secret”表示数据库密码,这里可以设置一个较强的密码来替换。
4、使用新的只读用户连接到Postgres
连接Redash中文版很简单。只需提供主机名,端口和数据库用户名、密码即可,示例如下。
接下来,我们可以执行一些查询来检查权限情况:
SELECT * FROM business.employees
能够返回数据。
下面执行:
INSERT INTO business.employees(name) VALUES ('Hal')
权限错误!该readonly角色不允许插入数据。
执行从customers表中查询:SELECT * FROM business.customers;
返回权限错误,因为只读角色只能访问特定的列。
执行:SELECT id, name FROM my.customers;
执行后发现能够查询到指定数据,因为我们仅请求了只读用户有权查询的列名。