Bir veritabanına (MySQL) erişebilen tüm kullanıcıları nasıl bilebilirim?


19

Bir veritabanına erişebilen tüm kullanıcıları nasıl tanırsınız?

Yanıtlar:


14

Mysql örneğine yönetici kullanıcı olarak (genellikle kök olarak) bağlanın ve aşağıdaki komutu verin ...

select user from mysql.db where db='DB_NAME';

Ben sadece canlı bir MariaDB (MySQL çatal) karşı koştu ve 2 boş satır döndürdü.
Chris S

1
Veritabanı adınız nedir? "DB_NAME" ifadesini db'nizin adıyla değiştirmeniz gerekir.
user79644

select user from mysql.dbKalifikasyon olmadan çalıştırmak da 2 boş satır döndürür.
Chris S

MariaDB ve MySQL arasındaki farkların ne olduğundan emin değilim, ancak bu sorgu standart bir MySQL 5 kurulumunda beklendiği gibi çalışıyor.
rvf

Bu OP'nin cevabının sadece bir kısmı. Mysql.user.db alanı, birkaç veritabanıyla eşleşen joker karakterler içerebilir. önerdiğiniz sorguyu kullanmak onları özlüyor. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

10

user79644'ün yanıtı, kullanıcıları veritabanı düzeyinde ayrıcalıklara sahip olur, ancak yalnızca tablo düzeyinde, sütun düzeyinde veya yordam düzeyinde ayrıcalıklara sahip kullanıcıları özler. Hepsini bulmak için aşağıdaki ifadeleri kullanın:

SELECT user,host FROM db WHERE db='name';
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';

En azından MySQL 5.5'te, sütun düzeyinde ayrıcalıklara sahip olmanın tablo düzeyinde ayrıcalıklara sahip olduğunuzu ima ettiği anlaşılıyor. Tablo düzeyinde ayrıcalıklara sahip olmak, veritabanı düzeyinde ayrıcalıklara sahip olduğunuz anlamına gelmez. Yordam düzeyinde ayrıcalıklardan emin değilim.


1
Bu sadece cevabın bir parçası. Mysql.user.db alanı, birkaç veritabanıyla eşleşen joker karakterler içerebilir. önerdiğiniz sorguyu kullanmak onları özlüyor. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

Hangi veritabanı? Ben alıyorumERROR 1046 (3D000): No database selected
user124384

@ user124384 Yanıtta söylenmeyen, mysqlveritabanını kullanmanız gerektiğidir . MySQL tarafından kullanılan tüm veriler burada saklanır. USE mysql;Tablo adlarına veritabanı adını ekleme komutunu verin FROM mysql.dbveya gibiFROM mysql.tables_priv
Gypsy Spellweaver

8
# current users that access the db
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+

# who can access what at anytime and his privilege level
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

# what privileges are available
mysql> show privileges;

2
hibe göster sadece geçerli (giriş yapmış) kullanıcının hibe gösterir
nl-x

root olarak ayrıca şovlar da yapabilirsiniz
Rowan Hawkins

2

Veritabanları için MySQL'in GRANTjoker karakterler içerebileceğini unutmayın . LIKESorguda şu şekilde hesaplanmalıdır :

SELECT user,host FROM db WHERE 'name' LIKE db;
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.