gooderp18绿色标准版
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

292 lignes
25KB

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>5.7. Privileges</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /><link rel="prev" href="ddl-alter.html" title="5.6. Modifying Tables" /><link rel="next" href="ddl-rowsecurity.html" title="5.8. Row Security Policies" /></head><body><div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">5.7. Privileges</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="ddl-alter.html" title="5.6. Modifying Tables">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="ddl.html" title="Chapter 5. Data Definition">Up</a></td><th width="60%" align="center">Chapter 5. Data Definition</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 12.4 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="ddl-rowsecurity.html" title="5.8. Row Security Policies">Next</a></td></tr></table><hr></hr></div><div class="sect1" id="DDL-PRIV"><div class="titlepage"><div><div><h2 class="title" style="clear: both">5.7. Privileges</h2></div></div></div><a id="id-1.5.4.9.2" class="indexterm"></a><a id="id-1.5.4.9.3" class="indexterm"></a><a id="id-1.5.4.9.4" class="indexterm"></a><a id="id-1.5.4.9.5" class="indexterm"></a><a id="id-1.5.4.9.6" class="indexterm"></a><a id="id-1.5.4.9.7" class="indexterm"></a><p>
  3. When an object is created, it is assigned an owner. The
  4. owner is normally the role that executed the creation statement.
  5. For most kinds of objects, the initial state is that only the owner
  6. (or a superuser) can do anything with the object. To allow
  7. other roles to use it, <em class="firstterm">privileges</em> must be
  8. granted.
  9. </p><p>
  10. There are different kinds of privileges: <code class="literal">SELECT</code>,
  11. <code class="literal">INSERT</code>, <code class="literal">UPDATE</code>, <code class="literal">DELETE</code>,
  12. <code class="literal">TRUNCATE</code>, <code class="literal">REFERENCES</code>, <code class="literal">TRIGGER</code>,
  13. <code class="literal">CREATE</code>, <code class="literal">CONNECT</code>, <code class="literal">TEMPORARY</code>,
  14. <code class="literal">EXECUTE</code>, and <code class="literal">USAGE</code>.
  15. The privileges applicable to a particular
  16. object vary depending on the object's type (table, function, etc).
  17. More detail about the meanings of these privileges appears below.
  18. The following sections and chapters will also show you how
  19. these privileges are used.
  20. </p><p>
  21. The right to modify or destroy an object is always the privilege of
  22. the owner only.
  23. </p><p>
  24. An object can be assigned to a new owner with an <code class="command">ALTER</code>
  25. command of the appropriate kind for the object, for example
  26. </p><pre class="programlisting">
  27. ALTER TABLE <em class="replaceable"><code>table_name</code></em> OWNER TO <em class="replaceable"><code>new_owner</code></em>;
  28. </pre><p>
  29. Superusers can always do this; ordinary roles can only do it if they are
  30. both the current owner of the object (or a member of the owning role) and
  31. a member of the new owning role.
  32. </p><p>
  33. To assign privileges, the <a class="xref" href="sql-grant.html" title="GRANT"><span class="refentrytitle">GRANT</span></a> command is
  34. used. For example, if <code class="literal">joe</code> is an existing role, and
  35. <code class="literal">accounts</code> is an existing table, the privilege to
  36. update the table can be granted with:
  37. </p><pre class="programlisting">
  38. GRANT UPDATE ON accounts TO joe;
  39. </pre><p>
  40. Writing <code class="literal">ALL</code> in place of a specific privilege grants all
  41. privileges that are relevant for the object type.
  42. </p><p>
  43. The special <span class="quote">“<span class="quote">role</span>”</span> name <code class="literal">PUBLIC</code> can
  44. be used to grant a privilege to every role on the system. Also,
  45. <span class="quote">“<span class="quote">group</span>”</span> roles can be set up to help manage privileges when
  46. there are many users of a database — for details see
  47. <a class="xref" href="user-manag.html" title="Chapter 21. Database Roles">Chapter 21</a>.
  48. </p><p>
  49. To revoke a privilege, use the fittingly named
  50. <a class="xref" href="sql-revoke.html" title="REVOKE"><span class="refentrytitle">REVOKE</span></a> command:
  51. </p><pre class="programlisting">
  52. REVOKE ALL ON accounts FROM PUBLIC;
  53. </pre><p>
  54. The special privileges of the object owner (i.e., the right to do
  55. <code class="command">DROP</code>, <code class="command">GRANT</code>, <code class="command">REVOKE</code>, etc.)
  56. are always implicit in being the owner,
  57. and cannot be granted or revoked. But the object owner can choose
  58. to revoke their own ordinary privileges, for example to make a
  59. table read-only for themselves as well as others.
  60. </p><p>
  61. Ordinarily, only the object's owner (or a superuser) can grant or
  62. revoke privileges on an object. However, it is possible to grant a
  63. privilege <span class="quote">“<span class="quote">with grant option</span>”</span>, which gives the recipient
  64. the right to grant it in turn to others. If the grant option is
  65. subsequently revoked then all who received the privilege from that
  66. recipient (directly or through a chain of grants) will lose the
  67. privilege. For details see the <a class="xref" href="sql-grant.html" title="GRANT"><span class="refentrytitle">GRANT</span></a> and
  68. <a class="xref" href="sql-revoke.html" title="REVOKE"><span class="refentrytitle">REVOKE</span></a> reference pages.
  69. </p><p>
  70. The available privileges are:
  71. </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">SELECT</code></span></dt><dd><p>
  72. Allows <a class="xref" href="sql-select.html" title="SELECT"><span class="refentrytitle">SELECT</span></a> from
  73. any column, or specific column(s), of a table, view, materialized
  74. view, or other table-like object.
  75. Also allows use of <a class="xref" href="sql-copy.html" title="COPY"><span class="refentrytitle">COPY</span></a> TO.
  76. This privilege is also needed to reference existing column values in
  77. <a class="xref" href="sql-update.html" title="UPDATE"><span class="refentrytitle">UPDATE</span></a> or <a class="xref" href="sql-delete.html" title="DELETE"><span class="refentrytitle">DELETE</span></a>.
  78. For sequences, this privilege also allows use of the
  79. <code class="function">currval</code> function.
  80. For large objects, this privilege allows the object to be read.
  81. </p></dd><dt><span class="term"><code class="literal">INSERT</code></span></dt><dd><p>
  82. Allows <a class="xref" href="sql-insert.html" title="INSERT"><span class="refentrytitle">INSERT</span></a> of a new row into a table, view,
  83. etc. Can be granted on specific column(s), in which case
  84. only those columns may be assigned to in the <code class="command">INSERT</code>
  85. command (other columns will therefore receive default values).
  86. Also allows use of <a class="xref" href="sql-copy.html" title="COPY"><span class="refentrytitle">COPY</span></a> FROM.
  87. </p></dd><dt><span class="term"><code class="literal">UPDATE</code></span></dt><dd><p>
  88. Allows <a class="xref" href="sql-update.html" title="UPDATE"><span class="refentrytitle">UPDATE</span></a> of any
  89. column, or specific column(s), of a table, view, etc.
  90. (In practice, any nontrivial <code class="command">UPDATE</code> command will
  91. require <code class="literal">SELECT</code> privilege as well, since it must
  92. reference table columns to determine which rows to update, and/or to
  93. compute new values for columns.)
  94. <code class="literal">SELECT ... FOR UPDATE</code>
  95. and <code class="literal">SELECT ... FOR SHARE</code>
  96. also require this privilege on at least one column, in addition to the
  97. <code class="literal">SELECT</code> privilege. For sequences, this
  98. privilege allows use of the <code class="function">nextval</code> and
  99. <code class="function">setval</code> functions.
  100. For large objects, this privilege allows writing or truncating the
  101. object.
  102. </p></dd><dt><span class="term"><code class="literal">DELETE</code></span></dt><dd><p>
  103. Allows <a class="xref" href="sql-delete.html" title="DELETE"><span class="refentrytitle">DELETE</span></a> of a row from a table, view, etc.
  104. (In practice, any nontrivial <code class="command">DELETE</code> command will
  105. require <code class="literal">SELECT</code> privilege as well, since it must
  106. reference table columns to determine which rows to delete.)
  107. </p></dd><dt><span class="term"><code class="literal">TRUNCATE</code></span></dt><dd><p>
  108. Allows <a class="xref" href="sql-truncate.html" title="TRUNCATE"><span class="refentrytitle">TRUNCATE</span></a> on a table, view, etc.
  109. </p></dd><dt><span class="term"><code class="literal">REFERENCES</code></span></dt><dd><p>
  110. Allows creation of a foreign key constraint referencing a
  111. table, or specific column(s) of a table.
  112. </p></dd><dt><span class="term"><code class="literal">TRIGGER</code></span></dt><dd><p>
  113. Allows creation of a trigger on a table, view, etc.
  114. </p></dd><dt><span class="term"><code class="literal">CREATE</code></span></dt><dd><p>
  115. For databases, allows new schemas and publications to be created within
  116. the database.
  117. </p><p>
  118. For schemas, allows new objects to be created within the schema.
  119. To rename an existing object, you must own the
  120. object <span class="emphasis"><em>and</em></span> have this privilege for the containing
  121. schema.
  122. </p><p>
  123. For tablespaces, allows tables, indexes, and temporary files to be
  124. created within the tablespace, and allows databases to be created that
  125. have the tablespace as their default tablespace. (Note that revoking
  126. this privilege will not alter the placement of existing objects.)
  127. </p></dd><dt><span class="term"><code class="literal">CONNECT</code></span></dt><dd><p>
  128. Allows the grantee to connect to the database. This
  129. privilege is checked at connection startup (in addition to checking
  130. any restrictions imposed by <code class="filename">pg_hba.conf</code>).
  131. </p></dd><dt><span class="term"><code class="literal">TEMPORARY</code></span></dt><dd><p>
  132. Allows temporary tables to be created while using the database.
  133. </p></dd><dt><span class="term"><code class="literal">EXECUTE</code></span></dt><dd><p>
  134. Allows calling a function or procedure, including use of
  135. any operators that are implemented on top of the function. This is the
  136. only type of privilege that is applicable to functions and procedures.
  137. </p></dd><dt><span class="term"><code class="literal">USAGE</code></span></dt><dd><p>
  138. For procedural languages, allows use of the language for
  139. the creation of functions in that language. This is the only type
  140. of privilege that is applicable to procedural languages.
  141. </p><p>
  142. For schemas, allows access to objects contained in the
  143. schema (assuming that the objects' own privilege requirements are
  144. also met). Essentially this allows the grantee to <span class="quote">“<span class="quote">look up</span>”</span>
  145. objects within the schema. Without this permission, it is still
  146. possible to see the object names, e.g. by querying system catalogs.
  147. Also, after revoking this permission, existing sessions might have
  148. statements that have previously performed this lookup, so this is not
  149. a completely secure way to prevent object access.
  150. </p><p>
  151. For sequences, allows use of the
  152. <code class="function">currval</code> and <code class="function">nextval</code> functions.
  153. </p><p>
  154. For types and domains, allows use of the type or domain in the
  155. creation of tables, functions, and other schema objects. (Note that
  156. this privilege does not control all <span class="quote">“<span class="quote">usage</span>”</span> of the
  157. type, such as values of the type appearing in queries. It only
  158. prevents objects from being created that depend on the type. The
  159. main purpose of this privilege is controlling which users can create
  160. dependencies on a type, which could prevent the owner from changing
  161. the type later.)
  162. </p><p>
  163. For foreign-data wrappers, allows creation of new servers using the
  164. foreign-data wrapper.
  165. </p><p>
  166. For foreign servers, allows creation of foreign tables using the
  167. server. Grantees may also create, alter, or drop their own user
  168. mappings associated with that server.
  169. </p></dd></dl></div><p>
  170. The privileges required by other commands are listed on the
  171. reference page of the respective command.
  172. </p><p>
  173. PostgreSQL grants privileges on some types of objects to
  174. <code class="literal">PUBLIC</code> by default when the objects are created.
  175. No privileges are granted to <code class="literal">PUBLIC</code> by default on
  176. tables,
  177. table columns,
  178. sequences,
  179. foreign data wrappers,
  180. foreign servers,
  181. large objects,
  182. schemas,
  183. or tablespaces.
  184. For other types of objects, the default privileges
  185. granted to <code class="literal">PUBLIC</code> are as follows:
  186. <code class="literal">CONNECT</code> and <code class="literal">TEMPORARY</code> (create
  187. temporary tables) privileges for databases;
  188. <code class="literal">EXECUTE</code> privilege for functions and procedures; and
  189. <code class="literal">USAGE</code> privilege for languages and data types
  190. (including domains).
  191. The object owner can, of course, <code class="command">REVOKE</code>
  192. both default and expressly granted privileges. (For maximum
  193. security, issue the <code class="command">REVOKE</code> in the same transaction that
  194. creates the object; then there is no window in which another user
  195. can use the object.)
  196. Also, these default privilege settings can be overridden using the
  197. <a class="xref" href="sql-alterdefaultprivileges.html" title="ALTER DEFAULT PRIVILEGES"><span class="refentrytitle">ALTER DEFAULT PRIVILEGES</span></a> command.
  198. </p><p>
  199. <a class="xref" href="ddl-priv.html#PRIVILEGE-ABBREVS-TABLE" title="Table 5.1. ACL Privilege Abbreviations">Table 5.1</a> shows the one-letter
  200. abbreviations that are used for these privilege types in
  201. <em class="firstterm">ACL</em> (Access Control List) values.
  202. You will see these letters in the output of the <a class="xref" href="app-psql.html" title="psql"><span class="refentrytitle"><span class="application">psql</span></span></a>
  203. commands listed below, or when looking at ACL columns of system catalogs.
  204. </p><div class="table" id="PRIVILEGE-ABBREVS-TABLE"><p class="title"><strong>Table 5.1. ACL Privilege Abbreviations</strong></p><div class="table-contents"><table class="table" summary="ACL Privilege Abbreviations" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Privilege</th><th>Abbreviation</th><th>Applicable Object Types</th></tr></thead><tbody><tr><td><code class="literal">SELECT</code></td><td><code class="literal">r</code> (<span class="quote">“<span class="quote">read</span>”</span>)</td><td>
  205. <code class="literal">LARGE OBJECT</code>,
  206. <code class="literal">SEQUENCE</code>,
  207. <code class="literal">TABLE</code> (and table-like objects),
  208. table column
  209. </td></tr><tr><td><code class="literal">INSERT</code></td><td><code class="literal">a</code> (<span class="quote">“<span class="quote">append</span>”</span>)</td><td><code class="literal">TABLE</code>, table column</td></tr><tr><td><code class="literal">UPDATE</code></td><td><code class="literal">w</code> (<span class="quote">“<span class="quote">write</span>”</span>)</td><td>
  210. <code class="literal">LARGE OBJECT</code>,
  211. <code class="literal">SEQUENCE</code>,
  212. <code class="literal">TABLE</code>,
  213. table column
  214. </td></tr><tr><td><code class="literal">DELETE</code></td><td><code class="literal">d</code></td><td><code class="literal">TABLE</code></td></tr><tr><td><code class="literal">TRUNCATE</code></td><td><code class="literal">D</code></td><td><code class="literal">TABLE</code></td></tr><tr><td><code class="literal">REFERENCES</code></td><td><code class="literal">x</code></td><td><code class="literal">TABLE</code>, table column</td></tr><tr><td><code class="literal">TRIGGER</code></td><td><code class="literal">t</code></td><td><code class="literal">TABLE</code></td></tr><tr><td><code class="literal">CREATE</code></td><td><code class="literal">C</code></td><td>
  215. <code class="literal">DATABASE</code>,
  216. <code class="literal">SCHEMA</code>,
  217. <code class="literal">TABLESPACE</code>
  218. </td></tr><tr><td><code class="literal">CONNECT</code></td><td><code class="literal">c</code></td><td><code class="literal">DATABASE</code></td></tr><tr><td><code class="literal">TEMPORARY</code></td><td><code class="literal">T</code></td><td><code class="literal">DATABASE</code></td></tr><tr><td><code class="literal">EXECUTE</code></td><td><code class="literal">X</code></td><td><code class="literal">FUNCTION</code>, <code class="literal">PROCEDURE</code></td></tr><tr><td><code class="literal">USAGE</code></td><td><code class="literal">U</code></td><td>
  219. <code class="literal">DOMAIN</code>,
  220. <code class="literal">FOREIGN DATA WRAPPER</code>,
  221. <code class="literal">FOREIGN SERVER</code>,
  222. <code class="literal">LANGUAGE</code>,
  223. <code class="literal">SCHEMA</code>,
  224. <code class="literal">SEQUENCE</code>,
  225. <code class="literal">TYPE</code>
  226. </td></tr></tbody></table></div></div><br class="table-break" /><p>
  227. <a class="xref" href="ddl-priv.html#PRIVILEGES-SUMMARY-TABLE" title="Table 5.2. Summary of Access Privileges">Table 5.2</a> summarizes the privileges
  228. available for each type of SQL object, using the abbreviations shown
  229. above.
  230. It also shows the <span class="application">psql</span> command
  231. that can be used to examine privilege settings for each object type.
  232. </p><div class="table" id="PRIVILEGES-SUMMARY-TABLE"><p class="title"><strong>Table 5.2. Summary of Access Privileges</strong></p><div class="table-contents"><table class="table" summary="Summary of Access Privileges" border="1"><colgroup><col /><col /><col /><col /></colgroup><thead><tr><th>Object Type</th><th>All Privileges</th><th>Default <code class="literal">PUBLIC</code> Privileges</th><th><span class="application">psql</span> Command</th></tr></thead><tbody><tr><td><code class="literal">DATABASE</code></td><td><code class="literal">CTc</code></td><td><code class="literal">Tc</code></td><td><code class="literal">\l</code></td></tr><tr><td><code class="literal">DOMAIN</code></td><td><code class="literal">U</code></td><td><code class="literal">U</code></td><td><code class="literal">\dD+</code></td></tr><tr><td><code class="literal">FUNCTION</code> or <code class="literal">PROCEDURE</code></td><td><code class="literal">X</code></td><td><code class="literal">X</code></td><td><code class="literal">\df+</code></td></tr><tr><td><code class="literal">FOREIGN DATA WRAPPER</code></td><td><code class="literal">U</code></td><td>none</td><td><code class="literal">\dew+</code></td></tr><tr><td><code class="literal">FOREIGN SERVER</code></td><td><code class="literal">U</code></td><td>none</td><td><code class="literal">\des+</code></td></tr><tr><td><code class="literal">LANGUAGE</code></td><td><code class="literal">U</code></td><td><code class="literal">U</code></td><td><code class="literal">\dL+</code></td></tr><tr><td><code class="literal">LARGE OBJECT</code></td><td><code class="literal">rw</code></td><td>none</td><td> </td></tr><tr><td><code class="literal">SCHEMA</code></td><td><code class="literal">UC</code></td><td>none</td><td><code class="literal">\dn+</code></td></tr><tr><td><code class="literal">SEQUENCE</code></td><td><code class="literal">rwU</code></td><td>none</td><td><code class="literal">\dp</code></td></tr><tr><td><code class="literal">TABLE</code> (and table-like objects)</td><td><code class="literal">arwdDxt</code></td><td>none</td><td><code class="literal">\dp</code></td></tr><tr><td>Table column</td><td><code class="literal">arwx</code></td><td>none</td><td><code class="literal">\dp</code></td></tr><tr><td><code class="literal">TABLESPACE</code></td><td><code class="literal">C</code></td><td>none</td><td><code class="literal">\db+</code></td></tr><tr><td><code class="literal">TYPE</code></td><td><code class="literal">U</code></td><td><code class="literal">U</code></td><td><code class="literal">\dT+</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
  233. <a id="id-1.5.4.9.22.1" class="indexterm"></a>
  234. The privileges that have been granted for a particular object are
  235. displayed as a list of <code class="type">aclitem</code> entries, where each
  236. <code class="type">aclitem</code> describes the permissions of one grantee that
  237. have been granted by a particular grantor. For example,
  238. <code class="literal">calvin=r*w/hobbes</code> specifies that the role
  239. <code class="literal">calvin</code> has the privilege
  240. <code class="literal">SELECT</code> (<code class="literal">r</code>) with grant option
  241. (<code class="literal">*</code>) as well as the non-grantable
  242. privilege <code class="literal">UPDATE</code> (<code class="literal">w</code>), both granted
  243. by the role <code class="literal">hobbes</code>. If <code class="literal">calvin</code>
  244. also has some privileges on the same object granted by a different
  245. grantor, those would appear as a separate <code class="type">aclitem</code> entry.
  246. An empty grantee field in an <code class="type">aclitem</code> stands
  247. for <code class="literal">PUBLIC</code>.
  248. </p><p>
  249. As an example, suppose that user <code class="literal">miriam</code> creates
  250. table <code class="literal">mytable</code> and does:
  251. </p><pre class="programlisting">
  252. GRANT SELECT ON mytable TO PUBLIC;
  253. GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
  254. GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
  255. </pre><p>
  256. Then <span class="application">psql</span>'s <code class="literal">\dp</code> command
  257. would show:
  258. </p><pre class="programlisting">
  259. =&gt; \dp mytable
  260. Access privileges
  261. Schema | Name | Type | Access privileges | Column privileges | Policies
  262. --------+---------+-------+-----------------------+-----------------------+----------
  263. public | mytable | table | miriam=arwdDxt/miriam+| col1: +|
  264. | | | =r/miriam +| miriam_rw=rw/miriam |
  265. | | | admin=arw/miriam | |
  266. (1 row)
  267. </pre><p>
  268. </p><p>
  269. If the <span class="quote">“<span class="quote">Access privileges</span>”</span> column is empty for a given
  270. object, it means the object has default privileges (that is, its
  271. privileges entry in the relevant system catalog is null). Default
  272. privileges always include all privileges for the owner, and can include
  273. some privileges for <code class="literal">PUBLIC</code> depending on the object
  274. type, as explained above. The first <code class="command">GRANT</code>
  275. or <code class="command">REVOKE</code> on an object will instantiate the default
  276. privileges (producing, for
  277. example, <code class="literal">miriam=arwdDxt/miriam</code>) and then modify them
  278. per the specified request. Similarly, entries are shown in <span class="quote">“<span class="quote">Column
  279. privileges</span>”</span> only for columns with nondefault privileges.
  280. (Note: for this purpose, <span class="quote">“<span class="quote">default privileges</span>”</span> always means
  281. the built-in default privileges for the object's type. An object whose
  282. privileges have been affected by an <code class="command">ALTER DEFAULT
  283. PRIVILEGES</code> command will always be shown with an explicit
  284. privilege entry that includes the effects of
  285. the <code class="command">ALTER</code>.)
  286. </p><p>
  287. Notice that the owner's implicit grant options are not marked in the
  288. access privileges display. A <code class="literal">*</code> will appear only when
  289. grant options have been explicitly granted to someone.
  290. </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ddl-alter.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ddl.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ddl-rowsecurity.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">5.6. Modifying Tables </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 5.8. Row Security Policies</td></tr></table></div></body></html>
上海开阖软件有限公司 沪ICP备12045867号-1