sql - sql中指定的授权
问题描述
我有一个示例商店数据库(AdventureWorks),我想授予每个客户编辑他们自己的销售额。所以看来我不能使用视图,因为必须为每个客户创建视图
解决方案
有两种方法:
像 Aleksandr 这样的观点建议:
CREATE VIEW myview WITH (security_barrier = true) AS SELECT ... FROM atable WHERE customer = current_user WITH CHECK OPTION;
此类视图也可以在 PostgreSQL 中修改
使用行级安全性。一个简单的例子:
ALTER TABLE atable ENABLE ROW LEVEL SECURITY; CREATE POLICY xy ON atable FOR ALL TO PUBLIC USING (customer = current_user) WITH CHECK (customer = current_user);
您会看到这两个示例都取决于当前的数据库用户。这是最简单的情况。
如果您没有为每个客户提供单独的数据库用户,则需要其他东西来识别数据库中的客户。一种常用的方法是使用数据库参数:应用程序设置类似
SET myapp.user = 'Customer1'; -- or use "application_name"
这样做的缺点是这样的设置可以被用户覆盖,用户可以通过这种方式破坏安全性。如果您想避免这种情况,请编写一个小的 C 扩展来定义一个正确的参数,该参数只能由超级用户设置,或者一旦设置就不能更改。
推荐阅读
- amazon-web-services - AWS Lambda 访问数据每小时刷新一次
- java - 我无法显示我在 jpanel 中加载的第二张图片
- java - 在 Spring Data 存储库的单元测试中忽略唯一约束
- c# - 无法在 Kubernetes 中从工作连接到服务
- kotlin - 如何以编程方式更改材质卡视图主题样式?
- javascript - 如何在 nodeJs 中使用 stream-json 中的管道写入文件?
- tensorflow - TensorFlow 对象检测:继续训练
- python - 我将数据从 csv 加载到 Python Pandas 并尝试将列设置为行(日期重复)
- java - 如何使用代码从 apk 中提取 SHA/MDA?
- python - 如何将标签添加到子图行和列?