授予用户 select 列权限,条件是用户只能访问与其 id 列相关的列 - Oracle pl/sql

grant select column privileges to user on condition that users can only access column related to their id column - Oracle pl/sql

我得到了一些 tables:

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 can only see and use SELECT the data on the 2 table 其 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;

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