代码之家  ›  专栏  ›  技术社区  ›  kittygirl

如何使用bash运行带有“encrypt()”的mysql脚本?

  •  0
  • kittygirl  · 技术社区  · 6 年前

    我的bash脚本如下:

    #!/bin/bash
    db_root_user='root'
    db_root_password='rootpassword'
    mail_db='mail'
    mysql --user="$db_root_user" --password="$db_root_password" << EOF
    CREATE DATABASE $mail_db;
    USE $mail_db;
    CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    CREATE TABLE users (staff_id SMALLINT unsigned NOT NULL,email_addr varchar(100) NOT NULL, password varchar(106) NOT NULL, PRIMARY KEY (email_addr)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    INSERT INTO domains (domain) VALUES ('myd1.com'),('myd2.com'),('myd3.com');
    INSERT INTO users (staff_id,email_addr, password) VALUES ('1','admin@myd1.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))),('1','admin@myd2.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))),('1','admin@myd3.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));
    EOF
    

    但我犯了如下错误:
    ERROR 1048 (23000) at line 6: Column 'password' cannot be null

    实际上, password 列是 ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))

    怎么了?
    提前谢谢!

    0 回复  |  直到 6 年前
        1
  •  0
  •   Wiimm    6 年前

    我试过了

    mysql -e "select ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))"
    

    偶尔得到 *0

    解决方案:避开美元符号:

    mysql -e "select ENCRYPT('mypassword',CONCAT('\$6\$', SUBSTRING(SHA(RAND()), -16)))"
    

    这也适用于这里的文件。

    推荐文章