作為一款數據可視化軟件,用戶更多的是利用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;
執行后發現能夠查詢到指定數據,因為我們僅請求了只讀用戶有權查詢的列名。