Add GRANT CONNECTION ON DATABASE, to be used in addition to pg_hba.conf.
Gevik Babakhani
This commit is contained in:
parent
87db3ad078
commit
4899aaf2d5
doc/src/sgml
src
backend
include
@ -1,4 +1,4 @@
|
|||||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/client-auth.sgml,v 1.87 2006/03/10 19:10:47 momjian Exp $ -->
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/client-auth.sgml,v 1.88 2006/04/30 02:09:06 momjian Exp $ -->
|
||||||
|
|
||||||
<chapter id="client-authentication">
|
<chapter id="client-authentication">
|
||||||
<title>Client Authentication</title>
|
<title>Client Authentication</title>
|
||||||
@ -206,6 +206,8 @@ hostnossl <replaceable>database</replaceable> <replaceable>user</replaceable>
|
|||||||
Multiple user names can be supplied by separating them with commas.
|
Multiple user names can be supplied by separating them with commas.
|
||||||
A separate file containing user names can be specified by preceding the
|
A separate file containing user names can be specified by preceding the
|
||||||
file name with <literal>@</>.
|
file name with <literal>@</>.
|
||||||
|
User and group connectivity can also be restricted by <command>GRANT
|
||||||
|
CONNECTION ON DATABASE</>.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$PostgreSQL: pgsql/doc/src/sgml/ref/grant.sgml,v 1.52 2006/02/14 03:32:14 momjian Exp $
|
$PostgreSQL: pgsql/doc/src/sgml/ref/grant.sgml,v 1.53 2006/04/30 02:09:06 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ GRANT { { USAGE | SELECT | UPDATE }
|
|||||||
ON SEQUENCE <replaceable class="PARAMETER">sequencename</replaceable> [, ...]
|
ON SEQUENCE <replaceable class="PARAMETER">sequencename</replaceable> [, ...]
|
||||||
TO { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
TO { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
||||||
|
|
||||||
GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
|
GRANT { { CREATE | TEMPORARY | TEMP | CONNECTION } [,...] | ALL [ PRIVILEGES ] }
|
||||||
ON DATABASE <replaceable>dbname</replaceable> [, ...]
|
ON DATABASE <replaceable>dbname</replaceable> [, ...]
|
||||||
TO { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
TO { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...] [ WITH GRANT OPTION ]
|
||||||
|
|
||||||
@ -229,6 +229,18 @@ GRANT <replaceable class="PARAMETER">role</replaceable> [, ...]
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>CONNECTION</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Allows the ability to connect to the specified database.
|
||||||
|
By default, Grant permissions allow users to connect to any database,
|
||||||
|
though <filename>pg_hba.conf</> can add additional connection
|
||||||
|
restrictions.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>TEMPORARY</term>
|
<term>TEMPORARY</term>
|
||||||
<term>TEMP</term>
|
<term>TEMP</term>
|
||||||
@ -417,6 +429,7 @@ GRANT <replaceable class="PARAMETER">role</replaceable> [, ...]
|
|||||||
X -- EXECUTE
|
X -- EXECUTE
|
||||||
U -- USAGE
|
U -- USAGE
|
||||||
C -- CREATE
|
C -- CREATE
|
||||||
|
c -- CONNECTION
|
||||||
T -- TEMPORARY
|
T -- TEMPORARY
|
||||||
arwdRxt -- ALL PRIVILEGES (for tables)
|
arwdRxt -- ALL PRIVILEGES (for tables)
|
||||||
* -- grant option for preceding privilege
|
* -- grant option for preceding privilege
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$PostgreSQL: pgsql/doc/src/sgml/ref/revoke.sgml,v 1.36 2006/01/21 02:16:18 momjian Exp $
|
$PostgreSQL: pgsql/doc/src/sgml/ref/revoke.sgml,v 1.37 2006/04/30 02:09:06 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ REVOKE [ GRANT OPTION FOR ]
|
|||||||
[ CASCADE | RESTRICT ]
|
[ CASCADE | RESTRICT ]
|
||||||
|
|
||||||
REVOKE [ GRANT OPTION FOR ]
|
REVOKE [ GRANT OPTION FOR ]
|
||||||
{ { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
|
{ { CREATE | TEMPORARY | TEMP | CONNECTION } [,...] | ALL [ PRIVILEGES ] }
|
||||||
ON DATABASE <replaceable>dbname</replaceable> [, ...]
|
ON DATABASE <replaceable>dbname</replaceable> [, ...]
|
||||||
FROM { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...]
|
FROM { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...]
|
||||||
[ CASCADE | RESTRICT ]
|
[ CASCADE | RESTRICT ]
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/catalog/aclchk.c,v 1.125 2006/03/05 15:58:22 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/catalog/aclchk.c,v 1.126 2006/04/30 02:09:07 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* See acl.h.
|
* See acl.h.
|
||||||
@ -1368,6 +1368,8 @@ string_to_privilege(const char *privname)
|
|||||||
return ACL_CREATE_TEMP;
|
return ACL_CREATE_TEMP;
|
||||||
if (strcmp(privname, "temp") == 0)
|
if (strcmp(privname, "temp") == 0)
|
||||||
return ACL_CREATE_TEMP;
|
return ACL_CREATE_TEMP;
|
||||||
|
if (strcmp(privname, "connection") == 0)
|
||||||
|
return ACL_CONNECT;
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||||
errmsg("unrecognized privilege type \"%s\"", privname)));
|
errmsg("unrecognized privilege type \"%s\"", privname)));
|
||||||
@ -1401,6 +1403,8 @@ privilege_to_string(AclMode privilege)
|
|||||||
return "CREATE";
|
return "CREATE";
|
||||||
case ACL_CREATE_TEMP:
|
case ACL_CREATE_TEMP:
|
||||||
return "TEMP";
|
return "TEMP";
|
||||||
|
case ACL_CONNECT:
|
||||||
|
return "CONNECTION";
|
||||||
default:
|
default:
|
||||||
elog(ERROR, "unrecognized privilege: %d", (int) privilege);
|
elog(ERROR, "unrecognized privilege: %d", (int) privilege);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.131 2006/03/05 15:58:40 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.132 2006/04/30 02:09:07 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -287,6 +287,9 @@ aclparse(const char *s, AclItem *aip)
|
|||||||
case ACL_CREATE_TEMP_CHR:
|
case ACL_CREATE_TEMP_CHR:
|
||||||
read = ACL_CREATE_TEMP;
|
read = ACL_CREATE_TEMP;
|
||||||
break;
|
break;
|
||||||
|
case ACL_CONNECT_CHR:
|
||||||
|
read = ACL_CONNECT;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
|
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
|
||||||
@ -550,7 +553,7 @@ acldefault(GrantObjectType objtype, Oid ownerId)
|
|||||||
owner_default = ACL_ALL_RIGHTS_SEQUENCE;
|
owner_default = ACL_ALL_RIGHTS_SEQUENCE;
|
||||||
break;
|
break;
|
||||||
case ACL_OBJECT_DATABASE:
|
case ACL_OBJECT_DATABASE:
|
||||||
world_default = ACL_CREATE_TEMP; /* not NO_RIGHTS! */
|
world_default = ACL_CREATE_TEMP | ACL_CONNECT; /* not NO_RIGHTS! */
|
||||||
owner_default = ACL_ALL_RIGHTS_DATABASE;
|
owner_default = ACL_ALL_RIGHTS_DATABASE;
|
||||||
break;
|
break;
|
||||||
case ACL_OBJECT_FUNCTION:
|
case ACL_OBJECT_FUNCTION:
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.162 2006/03/29 21:17:39 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/init/postinit.c,v 1.163 2006/04/30 02:09:07 momjian Exp $
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
|
|
||||||
static bool FindMyDatabase(const char *name, Oid *db_id, Oid *db_tablespace);
|
static bool FindMyDatabase(const char *name, Oid *db_id, Oid *db_tablespace);
|
||||||
static void ReverifyMyDatabase(const char *name);
|
static void ReverifyMyDatabase(const char *name, const char *user_name);
|
||||||
static void InitCommunication(void);
|
static void InitCommunication(void);
|
||||||
static void ShutdownPostgres(int code, Datum arg);
|
static void ShutdownPostgres(int code, Datum arg);
|
||||||
static bool ThereIsAtLeastOneRole(void);
|
static bool ThereIsAtLeastOneRole(void);
|
||||||
@ -130,8 +130,9 @@ FindMyDatabase(const char *name, Oid *db_id, Oid *db_tablespace)
|
|||||||
* during session startup, this place is also fitting to set up any
|
* during session startup, this place is also fitting to set up any
|
||||||
* database-specific configuration variables.
|
* database-specific configuration variables.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ReverifyMyDatabase(const char *name)
|
ReverifyMyDatabase(const char *name, const char *user_name)
|
||||||
{
|
{
|
||||||
Relation pgdbrel;
|
Relation pgdbrel;
|
||||||
SysScanDesc pgdbscan;
|
SysScanDesc pgdbscan;
|
||||||
@ -211,6 +212,23 @@ ReverifyMyDatabase(const char *name)
|
|||||||
(errcode(ERRCODE_TOO_MANY_CONNECTIONS),
|
(errcode(ERRCODE_TOO_MANY_CONNECTIONS),
|
||||||
errmsg("too many connections for database \"%s\"",
|
errmsg("too many connections for database \"%s\"",
|
||||||
name)));
|
name)));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checking for privilege to connect to the database
|
||||||
|
* We want to bypass the test if we are running in bootstrap mode
|
||||||
|
*/
|
||||||
|
if (!IsBootstrapProcessingMode())
|
||||||
|
{
|
||||||
|
if(pg_database_aclcheck(MyDatabaseId,GetUserId()
|
||||||
|
,ACL_CONNECT) != ACLCHECK_OK )
|
||||||
|
{
|
||||||
|
ereport(FATAL,
|
||||||
|
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||||
|
errmsg("couldn't connect to database %s", NameStr(dbform->datname)),
|
||||||
|
errdetail("User %s doesn't have the CONNECTION privilege for database %s.",
|
||||||
|
user_name, NameStr(dbform->datname))));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -487,7 +505,7 @@ InitPostgres(const char *dbname, const char *username)
|
|||||||
* superuser, so the above stuff has to happen first.)
|
* superuser, so the above stuff has to happen first.)
|
||||||
*/
|
*/
|
||||||
if (!bootstrap)
|
if (!bootstrap)
|
||||||
ReverifyMyDatabase(dbname);
|
ReverifyMyDatabase(dbname,username);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Final phase of relation cache startup: write a new cache file if
|
* Final phase of relation cache startup: write a new cache file if
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.326 2006/04/26 22:33:13 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.327 2006/04/30 02:09:07 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 200604262
|
#define CATALOG_VERSION_NO 200604291
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.308 2006/04/27 00:33:46 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.309 2006/04/30 02:09:07 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -57,7 +57,8 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */
|
|||||||
#define ACL_USAGE (1<<8) /* for languages and namespaces */
|
#define ACL_USAGE (1<<8) /* for languages and namespaces */
|
||||||
#define ACL_CREATE (1<<9) /* for namespaces and databases */
|
#define ACL_CREATE (1<<9) /* for namespaces and databases */
|
||||||
#define ACL_CREATE_TEMP (1<<10) /* for databases */
|
#define ACL_CREATE_TEMP (1<<10) /* for databases */
|
||||||
#define N_ACL_RIGHTS 11 /* 1 plus the last 1<<x */
|
#define ACL_CONNECT (1<<11) /* for database connection privilege */
|
||||||
|
#define N_ACL_RIGHTS 12 /* 1 plus the last 1<<x */
|
||||||
#define ACL_NO_RIGHTS 0
|
#define ACL_NO_RIGHTS 0
|
||||||
/* Currently, SELECT ... FOR UPDATE/FOR SHARE requires UPDATE privileges */
|
/* Currently, SELECT ... FOR UPDATE/FOR SHARE requires UPDATE privileges */
|
||||||
#define ACL_SELECT_FOR_UPDATE ACL_UPDATE
|
#define ACL_SELECT_FOR_UPDATE ACL_UPDATE
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/utils/acl.h,v 1.93 2006/03/05 15:59:06 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/utils/acl.h,v 1.94 2006/04/30 02:09:07 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* An ACL array is simply an array of AclItems, representing the union
|
* An ACL array is simply an array of AclItems, representing the union
|
||||||
@ -135,16 +135,17 @@ typedef ArrayType Acl;
|
|||||||
#define ACL_USAGE_CHR 'U'
|
#define ACL_USAGE_CHR 'U'
|
||||||
#define ACL_CREATE_CHR 'C'
|
#define ACL_CREATE_CHR 'C'
|
||||||
#define ACL_CREATE_TEMP_CHR 'T'
|
#define ACL_CREATE_TEMP_CHR 'T'
|
||||||
|
#define ACL_CONNECT_CHR 'c'
|
||||||
|
|
||||||
/* string holding all privilege code chars, in order by bitmask position */
|
/* string holding all privilege code chars, in order by bitmask position */
|
||||||
#define ACL_ALL_RIGHTS_STR "arwdRxtXUCT"
|
#define ACL_ALL_RIGHTS_STR "arwdRxtXUCTc"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Bitmasks defining "all rights" for each supported object type
|
* Bitmasks defining "all rights" for each supported object type
|
||||||
*/
|
*/
|
||||||
#define ACL_ALL_RIGHTS_RELATION (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_RULE|ACL_REFERENCES|ACL_TRIGGER)
|
#define ACL_ALL_RIGHTS_RELATION (ACL_INSERT|ACL_SELECT|ACL_UPDATE|ACL_DELETE|ACL_RULE|ACL_REFERENCES|ACL_TRIGGER)
|
||||||
#define ACL_ALL_RIGHTS_SEQUENCE (ACL_USAGE|ACL_SELECT|ACL_UPDATE)
|
#define ACL_ALL_RIGHTS_SEQUENCE (ACL_USAGE|ACL_SELECT|ACL_UPDATE)
|
||||||
#define ACL_ALL_RIGHTS_DATABASE (ACL_CREATE|ACL_CREATE_TEMP)
|
#define ACL_ALL_RIGHTS_DATABASE (ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT )
|
||||||
#define ACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE)
|
#define ACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE)
|
||||||
#define ACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE)
|
#define ACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE)
|
||||||
#define ACL_ALL_RIGHTS_NAMESPACE (ACL_USAGE|ACL_CREATE)
|
#define ACL_ALL_RIGHTS_NAMESPACE (ACL_USAGE|ACL_CREATE)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user