在工作中我有一个应用程序坐在Oracle 7.3上(旧的,是的)。最近我尝试创建一个能够在所有表上进行SELECT的帐户,但没有别的,即没有更新或删除。但每当我创建一个新帐户时,它都可以访问所有应用程序表。我甚至把它剥离到了CREATE SESSION。这没有帮助 - 用户仍然可以更新任何表格!
所以,我发现有一大堆公共同义词与表完全相同(即表myTable123,公共同义词myTable123)。我删除了其中一个,用户无法在该特定表上进行SELECT。然后我创建了一个新表,显然新用户看不到它。我为该表添加了一个公共同义词,希望用户能够访问它。没有运气,新用户无法看到它...这是有意义的,因为没有给予GRANT。还有别的东西......
我不是Oracle专家,而且我正试图找到问题的根源,但到目前为止还没有运气。 请帮助您提出任何建议。 干杯!达莫
答案 0 :(得分:5)
正如tuinstoel所说,你可以忽略公共同义词 - 这不会影响权限。
创建原始表时,你可能会创建一个
grant [permissions] on [table] to public
其中[permissions]可以像“all”一样广泛,这意味着任何新用户都将自动被授予对这些表的权限。
确实
select * from ALL_TAB_PRIVS where table_name = '[one of your problem tables]'
什么都归还?
BTW - 从未使用过Oracle 7.3.3 - 我假设在权限模型中没有太大的变化。答案 1 :(得分:1)
Oracle 7.3不仅仅是旧的,它非常非常非常老。它是12或13岁。
创建或删除公共syns不会更改任何访问表的权限。创建公共同义词的唯一原因是可以访问表而不用其模式名称作为前缀。
我认为您的旧用户拥有“更新任何表格”和“选择任何表格”或“dba”等权限。