使用Oracle数据库时,我经常读到不应该使用SYS来操作数据库(创建表,约束,序列,同义词等)。为什么不推荐?我的一些同事认为,只要你使用完全限定的描述符,使用SYS应该没有问题。这是真的? 通过将数据库作为SYS操作,可以在哪些场景中导致哪些问题?
答案 0 :(得分:1)
通过操纵a可以在哪些场景中引起哪些问题 数据库为SYS?
SYS
和SYSTEM
都是default
用户,通过创建数据库创建。虽然他们有很多权力 - 因为他们被授予DBA role
- 他们仍然是普通用户。因为SYS
拥有数据字典,所以他被认为比SYSTEM
更特殊。
但SYS
具有SYSTEM不支持的SYSDBA权限。这使SYS
成为一个非常强大的用户成为可能。
如果您尝试将shutdown
数据库视为普通SYS
,则差异会很明显:结果是insufficient privileges
。但是,如果以SYSDBA连接,则可以。
注意,SYSDBA
不是角色,而是privilege
。
SYS也很特别,因为无法在sys架构中创建触发器。此外,当sys连接到数据库时,不会执行登录触发器。
<强> SYS 强>
SYS
是数据库的所有者和数据字典的所有者。
永远不要在SYS架构中创建对象。
无法导出属于SYS的对象。
<强>系统强>
SYSTEM
是特权管理用户,通常拥有Oracle提供的除字典之外的表。不要在SYSTEM下创建自己的对象。
答案 1 :(得分:1)
因为SYS拥有数据库。
它可以做任何事情。如果您的同事忘记使用目标模式为目标对象添加前缀,则可能会损坏SYS模式和/或损坏数据库。
如果有太多人知道SYS密码,我会担心。因为它会产生审核问题。当出现问题时,除非他们拥有,否则很难知道谁应该负责任。不是说责备文化是一种好文化,但是当人们知道自己有责任时,人们会更加小心。
这不仅仅是一件安全事。它不仅是你需要担心的意外腐败。使用SYS密码的不良演员可以破坏数据库,窃取代码(IPR),当然还可以窃取机密数据。
也许您只是在谈论开发,而您的组织在生产中正确地做事。我希望如此。
使用SYS就像在铁路轨道上划一条捷径。可能你会没事,但为什么要承担风险呢?