当我尝试使用以下查询看到我的StoredProcedure使用RO访问时说MYSP
:
select * from all_objects where object_name ='MYSP';
它没有显示
但是使用RW访问运行相同的查询,它就在那里。怎么样?
如果存在这种差异,在这种情况下JDBC调用会受到影响吗?
答案 0 :(得分:1)
在SQL Server中,我们会定期为报告服务使用只读帐户。在许多情况下,我们在报告中存储过程而不是sql代码。在这些情况下,您必须将Exec授予该帐户的存储过程。这是增加安全级别的好方法。至于用户为什么看不到存储过程,这与用户有权访问的模式有关。即使只读帐户看到了存储过程,也只有在给予exec权限之后才能运行它。虽然是SQL Server用户,但我对all_objects的理解是用户可用对象的列表,这意味着RO帐户没有被授予执行存储过程的权限。
答案 1 :(得分:1)
听起来好像要使用DBA_OBJECTS,它描述了数据库中的所有对象。 ALL_OBJECTS描述当前用户可访问的所有对象。
如果用户或组无法使用DBA_OBJECTS,则可以使用SELECT_CATALOG_ROLE,它为数据字典中的对象提供SELECT权限。有关更多信息,请参阅here。