Only sys user and owner can compile the synonym?

Oracle 中的同义词是schema 对象的一个别名。同义词分为公共(public)同义词和私有(private)同义词.公共同义词可以被所有数据库用户所访问,而私有同义词只能被owner和被授权用户访问。

同义词可以不依赖于引用的对象单独存在,所以我们可以修改同义词所应用的对象,而后只需要重新定义(删除重建,同义词不可以通过ALTER 语法来重新定义)同义词就可以,这样可以降低应用程序的复杂性。当同义词被删除后所有被同义词应用的对象(当然TABLE 之类就除外了)将变成INVALID。
当然如果你删除或修改了某个同义词所引用的对象,同义词也会变成INVALID,当然我们不需要去手动compile同义词,当程序下次访问的时候,同义词自动会变成VALID,只要同义词所引用的对象没有错误就可以。
当然,如果你愿意你也可以使用ALTER (PUBLIC) SYNONYM语句手工编译同义词,注意,这里你只能使用sys user或者owner来编译private同义词。而public同义词只能用sys user来编译了。对于非owner或者其他任何用户,都会收到ORA-01031: insufficient privilege错误。
下面来实验一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
SQL> conn hr/hr
已连接。
SQL> create synonym syn_jobs for jobs;
 
同义词已创建。
 
SQL> alter synonym syn_jobs compile;
 
同义词已变更。
 
SQL> conn /as sysdba
已连接。
SQL>  alter synonym syn_jobs compile;
 alter synonym syn_jobs compile
*1 行出现错误:
ORA-00942: 表或视图不存在
 
 
SQL>  alter synonym hr.syn_jobs compile;
 
同义词已变更。
 
SQL> create public synonym syn_p_jobs for hr.jobs;
 
同义词已创建。
 
SQL> alter synonym syn_p_jobs compile;
alter synonym syn_p_jobs compile
*1 行出现错误:
ORA-00942: 表或视图不存在
 
 
SQL> alter public synonym syn_p_jobs compile;
 
同义词已变更。
 
SQL> conn system/system;
已连接。
SQL> alter public synonym syn_p_jobs compile;
alter public synonym syn_p_jobs compile
*1 行出现错误:
ORA-01031: 权限不足
 
 
SQL>  alter synonym hr.syn_jobs compile;
 alter synonym hr.syn_jobs compile
*1 行出现错误:
ORA-01031: 权限不足
 
 
SQL> create user syn_user identified by synuser
  2  default tablespace users
  3  temporary tablespace temp;
 
用户已创建。
 
SQL> conn /as sysdba
已连接。
SQL>  grant sysdba to syn_user;
 
授权成功。
 
SQL> grant dba to syn_user;
 
授权成功。
 
SQL> grant all on hr.jobs to syn_user;
 
授权成功。
 
SQL> conn syn_user/synuser;
已连接。
SQL>  alter synonym hr.syn_jobs compile;
 alter synonym hr.syn_jobs compile
*1 行出现错误:
ORA-01031: 权限不足
 
 
SQL>  alter public synonym syn_p_jobs compile;
 alter public synonym syn_p_jobs compile
*1 行出现错误:
ORA-01031: 权限不足

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*