问题描述
我有一些桌子:
Book(bookId,libraryId,bookName,bookType);
BookType(bookType,typeName);
图书馆(LibrayId);
用户(UserId);
BookBorrowed(BorrowId,LibraryId,UserId);
BorrowDetail(BorrowId,bookId)
以及在 sqlDeveloper、C##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;
然后只授予用户访问视图的权限,而不授予用户访问表的权限。