CREATE USER

Stai visualizzando una vecchia versione di questo article. Visualizza la versione più recente.

Sintassi

CREATE [OR REPLACE] USER [IF NOT EXISTS] 
 user_specification [,user_specification] ...
  [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
  [WITH resource_option [resource_option] ...]

user_specification:
  username [authentication_option]

authentication_option:
  IDENTIFIED BY 'authentication_string' 
  | IDENTIFIED BY PASSWORD 'hash_string'
  | IDENTIFIED {VIA|WITH} authentication_plugin
  | IDENTIFIED {VIA|WITH} authentication_plugin BY 'authentication_string'
  | IDENTIFIED {VIA|WITH} authentication_plugin {USING|AS} 'hash_string'

tls_option:
  SSL 
  | X509
  | CIPHER 'cipher'
  | ISSUER 'issuer'
  | SUBJECT 'subject'

resource_option:
  MAX_QUERIES_PER_HOUR count
  | MAX_UPDATE_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count

Spiegazione

L'istruzione CREATE USER crea uno o più nuovi account in MariaDB. Per usarla, occorre disporre del privilegio globale CREATE USER o del privilegio INSERT sul database mysql. Per ogni account, CREATE USER inserisce un nuovo record nella tabella mysql.user, che non ha privilegi.

Si veda Nomi degli account per i dettagli su come specificare i nomi degli account.

Se uno degli account specificati esiste già, si ottiene un errore 1396 (HY000). Se questo accade, CREATE USER crea comunque gli account che non esistono.

All'account può essere associata una password con la clausola opzionale IDENTIFIED BY. Se si specifica una password in chiato, la parola chiave PASSWORD deve essere omessa. Se si passa invece la stringa criptata restituita dalla funzione PASSWORD, la clausola PASSWORD deve essere presente.

Se non si specifica una password con la clausola IDENTIFIED BY, l'utente potrà connettersi senza specificarne una. Una password vuota non è un jolly che corrisponde a qualsiasi password. Se l'utente non ha una password, deve connettersi senza specificarne una.

Nomi degli account

I nomi degli account sono composti da un nome utente e un nome host, specificati con la sintassi 'nome_utente'@'nome_host'. Se l'host name non è specificato, sarà impostato a '%'. Quando ci si connette a un server MariaDB, il nome utente inserito e il nome dell'host utilizzato devono corrispondere a un account.

I nomi degli host possono contenere i caratteri jolly % e _. Le corrispondenze vengono cercate allo stesso modo in cui avviene con la clausola LIKE. Se si desidera inserire un carattere jolly letteralmente (per esempio, nel caso in cui il nome host contenga un underscore), il carattere deve essere preceduto da un backslash (\). Si veda LIKE per ulteriori informazioni sull'escape dei caratteri jolly.

I nomi degli host sono case-insensitive: non c'è differenza tra le lettere minuscole e le maiuscole. Essi possono essere nomi di dominio o indirizzi IP. Usando 'localhost' come nome di dominio si permettono solo connessioni locali.

Si può usare una maschera di rete per indicare un intervallo di indirizzi IP usando 'ip_base/maschera' come nome host. Un utente con un indirizzo ip ip potrà connettersi se la seguente condizione risulta vera:

ip & maschera = ip_base

Solo un multiplo di 8 bit dell'indirizzo da trovare può essere usato come maschera di rete. Questo significa che le seguenti maschere sono permesse:

255.0.0.0
255.255.0.0
255.255.255.0
255.255.255.255

Usare 255.255.255.255 equivale a non specificare affatto una maschera di rete.

Il nome utente e il nome dell'host possono essere senza virgolette, virgolettati con le virgolette singole o doppie come le stringhe, o virgolettati con i backtick come gli identificatori. Occorre virgolettarli quando contengono caratteri speciali (come il trattino) o caratteri jolly. Se vengono virgolettati, occorre virgolettare il nome utente e il nome dell'host separatamente, così: 'user_name'@'host_name'.

Il nome utente deve corrispondere esattamente, e le lettere minuscole non corrispondono alle maiuscole. E' possibile utilizzare una stringa vuota per far sì che qualsiasi utente corrisponda all'account.

E' possibile che più di un account corrisponda alle credenziali utilizzate al momento della connessione. MariaDB sceglie il primo account che risponde ai requisiti, dopo averli ordinati con i seguenti criteri:

  • Gli account con il nome host esatto vengono prima di quelli che utilizzano i caratteri jolly. A tale scopo, i nomi host che contengono una maschera di rete sono considerati esatti.
  • Gli account che contengono dei caratteri jolly nel nome host sono ordinati secondo la posizione del primo carattere jolly. Quelli che hanno un carattere jolly posizionato più avanti vengono prima.
  • Gli account con un nome utente non vuoto vengono prima di quelli che hanno un nome utente vuoto.

La tabella seguente, mostra un elenco di account semplici ordinati secondo i criteri elencati:

+---------+-------------+
| User    | Host        |
+---------+-------------+
| jeffrey | 192.168.0.3 |
|         | 192.168.0.% |
| jeffrey | 192.168.%   |
|         | 192.168.%   |
+---------+-------------+

Una volta stabilita la connessione, si hanno solo i privilegi concessi all'account corrispondente, non a tutti quelli a cui si potrebbe essere associati. Per esempio, si considerino i seguenti comandi:

CREATE USER 'jeffrey'@'192.168.0.3';
CREATE USER 'jeffrey'@'%';
GRANT SELECT ON test.t1 to 'jeffrey'@'192.168.0.3';
GRANT SELECT ON test.t2 to 'jeffrey'@'%';

Se ci si connette come jeffrey da 192.168.0.3, si avrà il permesso SELECT sulla tabella test.t1, ma non sulla tabella test.t2. Se invece ci si connette come jeffrey da qualsiasi altro indirizzo IP, si avrà il permesso SELECT sulla tabella test.t2, ma non su test.t1.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.