1 /*
   2  * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 
  27 package java.sql;
  28 
  29 import java.security.*;
  30 
  31 /**
  32  * The permission for which the <code>SecurityManager</code> will check
  33  * when code that is running an application with a
  34  * <code>SecurityManager</code> enabled, calls the
  35  * {@code DriverManager.deregisterDriver} method,
  36  * <code>DriverManager.setLogWriter</code> method,
  37  * <code>DriverManager.setLogStream</code> (deprecated) method,
  38  * {@code SyncFactory.setJNDIContext} method,
  39  * {@code SyncFactory.setLogger} method,
  40  * {@code Connection.setNetworkTimeout} method,
  41  * or the <code>Connection.abort</code> method.
  42  * If there is no <code>SQLPermission</code> object, these methods
  43  * throw a <code>java.lang.SecurityException</code> as a runtime exception.
  44  * <P>
  45  * A <code>SQLPermission</code> object contains
  46  * a name (also referred to as a "target name") but no actions
  47  * list; there is either a named permission or there is not.
  48  * The target name is the name of the permission (see below). The
  49  * naming convention follows the  hierarchical property naming convention.
  50  * In addition, an asterisk
  51  * may appear at the end of the name, following a ".", or by itself, to
  52  * signify a wildcard match. For example: <code>loadLibrary.*</code>
  53  * and <code>*</code> signify a wildcard match,
  54  * while <code>*loadLibrary</code> and <code>a*b</code> do not.
  55  * <P>
  56  * The following table lists all the possible <code>SQLPermission</code> target names.
  57  * The table gives a description of what the permission allows
  58  * and a discussion of the risks of granting code the permission.
  59  *
  60  *
  61  * <table class="striped">
  62  * <caption style="display:none">permission target name, what the permission allows, and associated risks</caption>
  63  * <thead>
  64  * <tr>
  65  * <th>Permission Target Name</th>
  66  * <th>What the Permission Allows</th>
  67  * <th>Risks of Allowing this Permission</th>
  68  * </tr>
  69  * </thead>
  70  *
  71  * <tbody>
  72  * <tr>
  73  *   <td>setLog</td>
  74  *   <td>Setting of the logging stream</td>
  75  *   <td>This is a dangerous permission to grant.
  76  * The contents of the log may contain usernames and passwords,
  77  * SQL statements, and SQL data.</td>
  78  * </tr>
  79  * <tr>
  80  * <td>callAbort</td>
  81  *   <td>Allows the invocation of the {@code Connection} method
  82  *   {@code abort}</td>
  83  *   <td>Permits an application to terminate a physical connection to a
  84  *  database.</td>
  85  * </tr>
  86  * <tr>
  87  * <td>setSyncFactory</td>
  88  *   <td>Allows the invocation of the {@code SyncFactory} methods
  89  *   {@code setJNDIContext} and {@code setLogger}</td>
  90  *   <td>Permits an application to specify the JNDI context from which the
  91  *   {@code SyncProvider} implementations can be retrieved from and the logging
  92  *   object to be used by the {@code SyncProvider} implementation.</td>
  93  * </tr>
  94  *
  95  * <tr>
  96  * <td>setNetworkTimeout</td>
  97  *   <td>Allows the invocation of the {@code Connection} method
  98  *   {@code setNetworkTimeout}</td>
  99  *   <td>Permits an application to specify the maximum period a
 100  * <code>Connection</code> or
 101  * objects created from the <code>Connection</code>
 102  * will wait for the database to reply to any one request.</td>
 103  * <tr>
 104  * <td>deregisterDriver</td>
 105  *   <td>Allows the invocation of the {@code DriverManager}
 106  * method {@code deregisterDriver}</td>
 107  *   <td>Permits an application to remove a JDBC driver from the list of
 108  * registered Drivers and release its resources.</td>
 109  * </tr>
 110  * </tbody>
 111  * </table>
 112  *
 113  * @since 1.3
 114  * @see java.security.BasicPermission
 115  * @see java.security.Permission
 116  * @see java.security.Permissions
 117  * @see java.security.PermissionCollection
 118  * @see java.lang.SecurityManager
 119  *
 120  */
 121 
 122 public final class SQLPermission extends BasicPermission {
 123 
 124     /**
 125      * Creates a new <code>SQLPermission</code> object with the specified name.
 126      * The name is the symbolic name of the <code>SQLPermission</code>.
 127      *
 128      * @param name the name of this <code>SQLPermission</code> object, which must
 129      * be either {@code  setLog}, {@code callAbort}, {@code setSyncFactory},
 130      *  {@code deregisterDriver}, or {@code setNetworkTimeout}
 131      * @throws NullPointerException if <code>name</code> is <code>null</code>.
 132      * @throws IllegalArgumentException if <code>name</code> is empty.
 133 
 134      */
 135 
 136     public SQLPermission(String name) {
 137         super(name);
 138     }
 139 
 140     /**
 141      * Creates a new <code>SQLPermission</code> object with the specified name.
 142      * The name is the symbolic name of the <code>SQLPermission</code>; the
 143      * actions <code>String</code> is currently unused and should be
 144      * <code>null</code>.
 145      *
 146      * @param name the name of this <code>SQLPermission</code> object, which must
 147      * be either {@code  setLog}, {@code callAbort}, {@code setSyncFactory},
 148      *  {@code deregisterDriver}, or {@code setNetworkTimeout}
 149      * @param actions should be <code>null</code>
 150      * @throws NullPointerException if <code>name</code> is <code>null</code>.
 151      * @throws IllegalArgumentException if <code>name</code> is empty.
 152 
 153      */
 154 
 155     public SQLPermission(String name, String actions) {
 156         super(name, actions);
 157     }
 158 
 159     /**
 160      * Private serial version unique ID to ensure serialization
 161      * compatibility.
 162      */
 163     static final long serialVersionUID = -1439323187199563495L;
 164 
 165 }