在用户只能访问与其 id 列相关的列的条件下向用户授予选择列权限 - Oracle pl/sql

问题描述

我有一些桌子:

Book(bookId,libraryId,bookName,bookType);

BookType(bookType,typeName);

图书馆(LibrayId);

用户(UserId);

BookBorrowed(BorrowId,LibraryId,UserId);

BorrowDetail(BorrowId,bookId)

以及在 sqlDeveloperC##DG 中创建的用户

如何GRANT privileges(select) ON BookBorrowed and User with UserId = 1(C##DG 只能查看和使用 SELECT 2 表中 UserId 列为 1 的数据)?.

你们能给我举一些例子吗?

非常感谢。

解决方法

没有您可以授予或撤销的列级权限之类的东西。您需要为这些类型的过滤器或限制实施虚拟专用数据库策略。请参阅此处:https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/using-oracle-vpd-to-control-data-access.html#GUID-06022729-9210-4895-BF04-6177713C65A7

,

正确的 Oracle 解决方案是 Virtual Private Database

如果这不是一个选项,另一种方法是定义视图,例如:

create view userBookBorrowed
   as select * from bookBorrowed bb
      join users u on (u.userid = bb.userid)
      where u.username = USER;

然后只授予用户访问视图的权限,而不授予用户访问表的权限。