Maison base de données tutoriel mysql 详解MySQL中的存取权限_MySQL

详解MySQL中的存取权限_MySQL

Jun 01, 2016 pm 12:59 PM
mysql 权限

看到很多网友提出关于MySQL登录不上服务器的问题,包括有的是在PHP中调用MySQL时发生的不能登录MySQL数据库服务器的问题,以为是PHP出了问题。其实是MySQL权限的问题。

  MySQL的权限系统在MySQL的手册中是很长的一章,我把它打印出来足足印了20多页!这里就将我对它的理解简要地写出来,希望能对刚刚接触MySQL的同志有点帮助;有说得不对的地方,也请同志们指出。

  在我了解了MySQL的权限机制后,不由得不赞叹它的严密与巧妙;也许所有的数据库系统都是如此罢,只是别的大型数据库把权限做得不需超级管理员亲自干预数据表而已。

  MySQL的权限保存在名为mysql的数据库中,有user、db、host、tables_priv、columns_priv 等五个表。

  首先,限制用户的登录的,只有 user 表,其中最常用的是 user、host、password这三个字段。其他的select_priv、update_priv、…… 这些字段分别表示该用户是否有select、update、……等权限,这些字段设置为'Y'表示该用户拥有对应的权限,'N'表示用户没有对应的权限。注意,这里指定的权限是全局的,一旦你在user表中给了一个用户select或update权限,他就对这台服务器上任何数据库、任何表拥有上述权限!其中当然包括mysql数据库!!这意味着他可以通过更改user表里的数据非法地获取更大的权限!!!这是非常可怕的,所以建议除了给root用户外,不要在user表中分配权限。特别的,你可以建立一个几乎跟root拥有同样权限的用户(密码可不要告诉别人哟!)在忘记了root密码时就用得到了。在添加一个用户时,如果不指定权限字段的值,它们的默认值都是'N',——也就是这个用户什么权限也没有——你可以放心的在user表中添加用户,因为即使他能登录进来,却什么也干不了。

  还有一个应该注意的问题就是user表中的password字段。试想,既然root用户可以浏览mysql数据库,可以看到user表的password字段,是不是就是看到了其他用户的密码呢?不是的!user表的password字段保存的是用password()函数加密了的用户密码,当用户登录时,服务器将收到的用户输入的密码用password()函数加密,加密得到的字串与user表password字段如能匹配,则认为密码正确。password()没有逆运算,所以任何人无法从一个加密的字串得到密码的明文。同时,如果你手工修改user表,别忘了在更新password字段时一定要用password()函数加密。例如,你要允许一位名为 bill 的用户登录你的服务器,你给他设定一个 12345 的密码,则应该:

insert into user (user,host,password) values ('bill','%',password('12345'));

Copier après la connexion

如果你直接

insert into user (user,host,password) values ('bill','%','12345');

Copier après la connexion

的话,恐怕他登不上你的服务器,也会到奥索网上发帖子问的。

  注意,每当手工操作了跟权限有关的数据表以后,要执行一条 flush privileges 命令才能使其生效。

  下面的问题就是如何给用户分配权限了。如果你要给一个用户开一个数据库,并把有关这个数据库的所有或部分权限开放给他,这就用到了db表。db表的意义在于,当一个用户请求一个查询时,检测该用户对于他的查询所针对的数据库是否拥有进行该查询操作的权限,有,则允许查询;没有,则进一步咨询tables_priv表。db表的最常用字段是 user、db、和那一大堆有关权限的字段。user,不用说了,就是那个用户的用户名,跟user表中的对应;db,就是要分给他的数据库名。然后就把要给他的权限相对应的权限字段设为'Y'。同样,这些字段的值在不指定的时候默认是'N'。你也可以用GRANT/REVOKE命令给用户分配权限,可以是这样的:

grant select,update,insert,delete,creater,alter,drop,index on bill.* to bill;

Copier après la connexion

  这样就把针对bill这个数据库的几乎所有的权限给了用户bill。这里没有给的只是grant权限,关于这个权限,建议不要轻易给人,因为用户有了grant权限,也就可以将权限分配给其他用户。值得庆幸的是,拥有grant权限的用户能而且只能将他自己已经拥有的权限分配给别人。

  使用GRANT/REVOKE命令更改了权限后,不须执行 flush privileges 命令就可以使更改生效。

  上面讨论的是给一个用户完全开放一个数据库的问题,如果只想给一个用户一个特定的表的权限,就是 tables_priv 表发挥作用的时候啦。这里的关键性字段是user、db、table_name 。显而易见的,要给一个用户指定一个特定的数据库中特定表的权限,三个关键要素就是:哪个用户(user)、哪个数据库(db)、哪个表(table_name)。它的机理跟db表是类似的,我不必再重复。唯一不同的是这里用了一个SET类型的字段 table_priv 来指定用户对这个表权限,SET的成员有 SELECT, UPDATE, INSERT, DELETE, ALTER, CREATE, DROP, GRANT, INDEX, REFERENCE 等,你可以选择其中任意一个或几个分配给用户。

  在上述提及的几个权限表中以及未提及的host表中,都有一个host字段,它用来区分来自不同主机的、用户名可能相同的人,或者是给同一个用户从不同的主机连接时给予不同的权限。这种用法不很常用,但为了安全起见,建议root用户,如果不需要从远程连接,请将他的host设为 localhost,其他的则可以设为 % ,即任何主机。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Activez les autorisations root en un seul clic (obtenez rapidement les autorisations root) Activez les autorisations root en un seul clic (obtenez rapidement les autorisations root) Jun 02, 2024 pm 05:32 PM

Il permet aux utilisateurs d'effectuer des opérations plus approfondies et de personnaliser le système. L'autorisation root est une autorisation d'administrateur dans le système Android. L'obtention des privilèges root nécessite généralement une série d'étapes fastidieuses, qui peuvent toutefois ne pas être très conviviales pour les utilisateurs ordinaires. En activant les autorisations root en un seul clic, cet article présentera une méthode simple et efficace pour aider les utilisateurs à obtenir facilement les autorisations système. Comprenez l'importance et les risques des autorisations root et disposez d'une plus grande liberté. Les autorisations root permettent aux utilisateurs de contrôler entièrement le système de téléphonie mobile. Renforcez les contrôles de sécurité, personnalisez les thèmes et les utilisateurs peuvent supprimer les applications préinstallées. Par exemple, la suppression accidentelle de fichiers système provoquant des pannes du système, une utilisation excessive des privilèges root et l'installation par inadvertance de logiciels malveillants sont également risquées. Avant d'utiliser les privilèges root

Compétences de traitement de structures de données volumineuses de PHP Compétences de traitement de structures de données volumineuses de PHP May 08, 2024 am 10:24 AM

Compétences en matière de traitement de la structure des Big Data : Chunking : décomposez l'ensemble de données et traitez-le en morceaux pour réduire la consommation de mémoire. Générateur : générez des éléments de données un par un sans charger l'intégralité de l'ensemble de données, adapté à des ensembles de données illimités. Streaming : lisez des fichiers ou interrogez les résultats ligne par ligne, adapté aux fichiers volumineux ou aux données distantes. Stockage externe : pour les ensembles de données très volumineux, stockez les données dans une base de données ou NoSQL.

Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Jun 03, 2024 pm 12:19 PM

La sauvegarde et la restauration d'une base de données MySQL en PHP peuvent être réalisées en suivant ces étapes : Sauvegarder la base de données : Utilisez la commande mysqldump pour vider la base de données dans un fichier SQL. Restaurer la base de données : utilisez la commande mysql pour restaurer la base de données à partir de fichiers SQL.

Comment optimiser les performances des requêtes MySQL en PHP ? Comment optimiser les performances des requêtes MySQL en PHP ? Jun 03, 2024 pm 08:11 PM

Les performances des requêtes MySQL peuvent être optimisées en créant des index qui réduisent le temps de recherche d'une complexité linéaire à une complexité logarithmique. Utilisez PreparedStatements pour empêcher l’injection SQL et améliorer les performances des requêtes. Limitez les résultats des requêtes et réduisez la quantité de données traitées par le serveur. Optimisez les requêtes de jointure, notamment en utilisant des types de jointure appropriés, en créant des index et en envisageant l'utilisation de sous-requêtes. Analyser les requêtes pour identifier les goulots d'étranglement ; utiliser la mise en cache pour réduire la charge de la base de données ; optimiser le code PHP afin de minimiser les frais généraux.

Comment insérer des données dans une table MySQL en utilisant PHP ? Comment insérer des données dans une table MySQL en utilisant PHP ? Jun 02, 2024 pm 02:26 PM

Comment insérer des données dans une table MySQL ? Connectez-vous à la base de données : utilisez mysqli pour établir une connexion à la base de données. Préparez la requête SQL : Écrivez une instruction INSERT pour spécifier les colonnes et les valeurs à insérer. Exécuter la requête : utilisez la méthode query() pour exécuter la requête d'insertion en cas de succès, un message de confirmation sera généré.

Comment créer une table MySQL en utilisant PHP ? Comment créer une table MySQL en utilisant PHP ? Jun 04, 2024 pm 01:57 PM

La création d'une table MySQL à l'aide de PHP nécessite les étapes suivantes : Connectez-vous à la base de données. Créez la base de données si elle n'existe pas. Sélectionnez une base de données. Créer un tableau. Exécutez la requête. Fermez la connexion.

Comment utiliser les procédures stockées MySQL en PHP ? Comment utiliser les procédures stockées MySQL en PHP ? Jun 02, 2024 pm 02:13 PM

Pour utiliser les procédures stockées MySQL en PHP : Utilisez PDO ou l'extension MySQLi pour vous connecter à une base de données MySQL. Préparez l'instruction pour appeler la procédure stockée. Exécutez la procédure stockée. Traitez le jeu de résultats (si la procédure stockée renvoie des résultats). Fermez la connexion à la base de données.

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Dec 09, 2024 am 11:42 AM

L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

See all articles