当前位置: 澳门新濠3559 > 数据库 > 正文

来就送 20元现金领取地址,  需要安装

时间:2019-11-09 19:36来源:数据库
默认情况下,mysql.db表中包含的行表示任意用户可以访问test数据库和test_开头的数据库。这些行的User字段的值为空,表示匹配任意用户。这意味着这些数据库(test数据库和test_开头的数

默认情况下,mysql.db表中包含的行表示任意用户可以访问test数据库和test_开头的数据库。这些行的User字段的值为空,表示匹配任意用户。这意味着这些数据库(test数据库和test_开头的数据库)默认可以被任意用户使用(即使没有权限的用户)。

       

1 获取帮助文档

我的项目要往数据库中插入create_time和update_time,那就势必要引用现在的系统时间,经过大量的查找,终于发现往python是没有对应时间datetime的相关通配符的,那么我们要怎么实现呢。

mysql.db 默认设置:

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。 

cd C:Program Filesmysqlmysql-5.5.50-winx64
C:Program Filesmysqlmysql-5.5.50-winx64> binmysqld.exe --verbose --help > mysqld_note.txt

其实很简单,我们只需要把datetime转换成字符串类型的就行

澳门新濠3559 1

 

 

    def insertIntoChannel(self, user):  
            conn = JDBCUtils.getConnection()  
            cursor = conn.cursor()  
            dt=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")  
            cursor.execute("insert into user(id,age,name,create_time,update_time)   
                          values('%d','%d','%s','%s','%s')" %   
                           (user.getId(),user.getAge(), user.getName(),dt,dt))  
            cursor.close()  
            conn.commit()  
            conn.close()  

 


2 在 Windows 平台以服务运行

时间间隔

初始化的mysql环境中mysql.db表默认包含的2行test数据库相关的配置,导致任意用户可以随意操作test或者test_开头的数据库,如果你想避免此问题,可以直接drop test数据库。

 

2.1 启动服务器

import time
def sleeptime(hour,min,sec):
    return hour*3600 + min*60 + sec;
second = sleeptime(0,0,20);
while 1==1:
    time.sleep(second);
    print 'do action'
#这是隔20秒执行一次
;

关于此现象,大家可能需要注意的问题:
1、正式环境千万别使用test数据库或者创建test_开头的数据库来存储业务数据
2、对用户的权限进行测试、验证的时候,千万别去test数据库,这可能误导你
3、如果想彻底避免以上问题,可以将mysql.db中test相关的数据delete掉。

 

  需要安装,写个安装脚本“binmysqld.exe --install”,执行即可。在服务管理运行数据库,默认服务名称“MySQL”。需要指定服务名称时,要在安装时设定“binmysqld.exe --install mysql5.5”。

另外操作远程数据库需要远程数据库对本地进行授权:

 

在一个项目的预商用环境下,我搭建的数据库都是以“test_”开头的,昨天应开发要求给创建了一个只有select权限的用户以供查看数据排错,但是奇怪的事情就发生了,开发过一会儿跟我说用这个账户可以修改数据!

  安装时,如果使用“--install”表示主机启动时自动启动服务,使用“--install-manual”表示不启动。

若没有授权会出现以下提示

【对已有test开头的数据库】,如果想取消某用户对test的权限,必须在test.db表里面增加一条该用户的记录,每项权限都是N即可。 

       我自己试了一下尼玛果然可以,于是各种排查,最后锁定在数据库名称上,因为只要新建了用户,在不赋予任意权限之前都可以操作这项目所属的几个数据库,而对于其它数据库则规规矩矩来。然后请教别人,在官方的操作手册里指出grant命令创建权限时注意数据库名称里的通配符“_”和“%”要及时转义,但是经排查测试发现并不是匹配问题,于是继续疯狂搜索,终于找着一篇帖子:

rem  启动数据库②
C:> net start mysql

rem  启动数据库②
C:> sc query mysql
C:> sc start mysql

rem  查看监听
C:> netstat -na -p tcp
ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL server 
  • 澳门新濠3559,mysql.user表决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限。这些权限适用于服务器上的all数据库。
  • mysql.db表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。

 

在本机登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称'%'。

      看到这里,我们找到原因了!原来在mysql里默认以test开头的数据库能被任意可登陆用户访问操作!具体可以select * from mysql.db where user=''G看一下。

  连接服务器,root 用户默认无密码。安装后需要修改默认密码。测试成功后,按需要设定环境变量。初始登陆时,没有连接任何数据库。

mysql -u root -p
mysql>use mysql;
mysql>select 'host' from user where user='root';
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;
mysql>select 'host'   from user where user='root'; 

澳门新濠3559 2

C:Program Filesmysqlmysql-5.5.50-winx64> binmysql -uroot -p -h localhost
mysql> show databases;
mysql> use mysql;
mysql> show tables;

第一句是以权限用户root登录

      “从权限上来看,host为%,user为空,这就说明了不限制的,所有能连接到MySQL的用户,几乎都拥有test库的所有权限”于是我推测出奇怪问题的服务器之前在安装Mysql后没有执行mysql_secure_installation命令,而只是单纯删除了test数据库,再对比执行过安全初始化的mysql,其中mysql.db表里已经没有了test记录。

 

第二句:选择mysql库

另外,以后建立数据库不要随便以“test”开头了。

2.2 启动多个端口

第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)

  设置两个配置文件,建立两个数据目录;

第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址

[mysqld]
port        = 3307
bind_address = 192.168.130.1
character_set_server  = gbk
datadir = C:/data/data2

[mysqld]
port        = 3308
bind_address = 192.168.130.1
character_set_server  = gbk
datadir = C:/data/data3

第五句:刷新MySQL的系统权限相关表

 

第六句:再重新查看user表时,有修改。。

  启动服务:

记得Mysql服务需要重新启动(确保修改有效),否则可能修改的结果无法体现。

C:WINDOWSsystem32>mysqld --defaults-file=C:/data/my2.ini
160629 10:09:05 [Note] mysqld (mysqld 5.5.50) starting as process 14408 ...

C:WINDOWSsystem32>mysqld --defaults-file=C:/data/my3.ini
160629 10:09:30 [Note] mysqld (mysqld 5.5.50) starting as process 14508 ...

C:WINDOWSsystem32>netstat -na -p tcp -o | findstr "192.168.130.1"
  TCP    192.168.130.1:3307     0.0.0.0:0              LISTENING       14408
  TCP    192.168.130.1:3308     0.0.0.0:0              LISTENING       14508

注意:修改过后本地root账户无法连接数据库

 

phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应该检查配置文件中的主机、用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致。

 

仍然使用root账户登陆,密码为空。删除root用户再创建并授权。

2.3 服务方式启动多个端口

mysql -u root -p
drop user 'root'@'localhost'
create user 'root'@'localhost' identified by '你的密码';
grant all privileges on *.* to root@'localhost';

  必要时,删除之前添加的服务。重新安装服务:

另外:可以创建远程登陆用户并授权

mysqld --install mysql2 --defaults-file=C:/data/my2.ini
mysqld --install mysql3 --defaults-file=C:/data/my3.ini
net start mysql2
net start mysql3
grant all PRIVILEGES on test_db.* to root@'192.168.1.101'  identified by '23455';
flush privileges; 

  此时,mysql 连接时需要使用选项“-P”指定连接的服务使用的端口号。

all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。

 

test_db.* 表示上面的权限是针对于哪个表的,test_db指的是数据库,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“*.*”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授权为“数据库名.表名”。

2.4 命名管道、共享内存

root 表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。

  使用命名管道连接数据库,修改配置文件:

192.168.1.101   表示允许远程连接的 IP 地址,也就是你本地的ip地址。如果想不限制链接的 IP 则设置为“%”即可。

skip-networking
enable-named-pipe

123456 为用户的密码。

  重启服务,使用命令连接数据库:

ERROR : (2006, 'MySQL server has gone away')
mysql --protocol=pipe -uroot

问题分析:client和MySQL server之间的链接断开了。

  如果,需改了系统默认用户,查验后适当添加用户“create user 'root'@'localhost';”。

造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入)。

 

  使用共享内存连接数据库,修改配置文件:

skip-networking
shared-memory=on

  重启服务,使用命令连接数据库:

mysql --protocol=memory -uroot

  指定连接名称配置文件、连接命令(默认连接“MYSQL”):

skip-networking
shared-memory=on
shared_memory_base_name = MYSQL1

C:> mysql -umldn -p --protocol=memory -Dmldn --shared-memory-base-name=MYSQL1
C:> mysql --protocol=memory --shared_memory_base_name=MYSQL1 -uroot
mysql> show variables like '%memory%';

 

 

  * 如果是没有明确使用哪个,默认是命名管道方式;两者在监听时共享内存可以通过命令“mysql -uroot”连接:

skip-networking
#shared-memory=on
#enable-named-pipe

 

3 配置信息

  在没有“任何配置”的情况下,服务依然可以启动,需要有效控制服务启动时设定配置文件。在安装目录下依据参考配置文件,修改(复制)为“my.ini”。

  查看运行时配置信息。(帮助文档最后一行获悉)(设定下环境变量)

 

3.1 查询

rem  配置查询
 C: mysqladmin variables

rem  查看字符集
 C: mysqladmin variables | findstr "character"

rem  查看数据路径
 C: mysqladmin variables | findstr "datadir"

rem  查看存储引擎
 C: mysqladmin variables | findstr "default_storage_engine"

rem  查看“hostname”
 C: mysqladmin variables | findstr "hostname"

rem  查看“innodb”信息
 C: mysqladmin variables | findstr "innodb"

rem  查看日志信息
 C: mysqladmin variables | findstr "log"

rem  查看“port”信息
 C: mysqladmin variables | findstr "port"

rem  性能查询
 C: mysqladmin status

 

3.2 设置

  字符集改为“gbk”,修改配置文件“[mysqld]”。

character_set_server  = gbk

  可以修改的字符集,可以通过命令查询得知,也可以从配置文件(“sharecharsetsindex.xml”)里看到。

mysql> show character set;

 

  监听端口改为“33306”,监听地址“192.168.130.1”:

port = 33306
bind_address = 192.168.130.1

  设定“bind_address”选项后,监听地址被限定在某一个接口地址上,不设定该选项,所有机器上地址都监听。默认监听显示“0.0.0.0”,表示监听了“所有 ipv4 地址”;如果是“::”,表示监听了“所有 ipv4 和 ipv6 地址”。

 

  数据库目录;复制默认的目录内容到新设定的数据目录中。

datadir = D:/data/

 

4 增加用户

  默认情况,mysql 只接受本地登录的用户;并且登陆无需密码,连用户名不输入都可以。

 

4.1 root用户

  默认情况下,root在本地登录时不需要密码;甚至不需要用户名也可以登陆。可是要是修改了监听 IP 地址时,所有用户就统统无法登陆了。需要在修改监听之前设定好,这里仅仅设定了查询 mysql 库的权限。

mysql> create user 'root'@'192.168.130.1';
mysql> update user set Select_priv='Y' where user='root' and host='192.168.130.1';
mysql> update user set password=password('xxxxxx') where host='192.168.130.1';
mysql> select host,user,password from user ;
+---------------+------+-------------------------------------------+
| host          | user | password                                  |
+---------------+------+-------------------------------------------+
| localhost     | root |                                           |
| 127.0.0.1     | root |                                           |
| ::1           | root |                                           |
| localhost     |      |                                           |
| 192.168.130.1 | root | *BDAB0082659254CA8B96B38EC29F67DB05A48D3C |
+---------------+------+-------------------------------------------+
5 rows in set (0.00 sec)

  使用“set password for 'user'@'host'=password('new-password');”也可以修改密码;或者“grant all privileges on database.table to 'user'@'host' identified by 'new-password;'”。

 

rem  增加更多权限:
mysql> grant all on mysql.* to 'root'@'192.168.130.1';

rem  配置生效:
mysql> flush privileges;

 

4.2 其他用户

  针对数据库“test”增加一个高级用户。

mysql> create user 'sunny'@'192.168.130.1';
mysql> update user set password=password('xxxxxx') where user='sunny';
mysql> grant all on test.* to 'sunny'@'192.168.130.1';
mysql> flush privileges;

 

  登陆后,执行下边命令,查看当前用户、当前连接数据库:

mysql> select user();
mysql> select database();

 

4.3 test库的问题

  当设定的用户是“test”库时,如果输入错误的密码当然无法登陆。但是在不输入密码(设置过密码)的情况下,却也可以登陆。这是应为用户登录数据库,受到多个表的管制,打开表“mysql.db”时,啥都明白了。

mysql> select host,db,user from db;
+---------------+---------+-------+
| host          | db      | user  |
+---------------+---------+-------+
| %             | test    |       |
| %             | test_% |       |
| 192.168.130.1 | test    | sunny |
+---------------+---------+-------+
3 rows in set (0.00 sec)

  这个表内容,是什么意思。“登陆任意主机”、“test库”“test_开头的库”,不需要用户名即可登录。当然在输入用户名“sunny”没有输入密码时可以登录。

 

4.4 默认‘root’权限

  查看原有用户权限“show grants”,给新用户赋予相应权限:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
mysql> GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;

 

5 mysqladmin

  语法:mysqladmin 选项 子命令;子命令:create、drop、extended-status、flush-privileges、flush-status、ping、kill、processlist、shutdown、status、(global )variables。选项:-i、-c。

C:> mysqladmin -uroot -p -h192.168.130.1 extend-status
C:> mysqladmin -uroot -p -h192.168.130.1 shutdown
C:> mysqladmin -uroot -p -h192.168.130.1 ping

 


查询

查看当前库、库包含的表:

mysql> select database();
mysql> show tables;

 

查看当前用户、用户权限:

mysql> select user();
mysql> show grants for 'mldn'@'localhost';

 

查看表属性(可以使用“%”作为通配符匹配)、创建语句:

mysql> show table status like 'user' G
mysql> show create table userG

 

查看变量(默认显示会话变量,“session”、“global”)

mysql> show variables like '%memory%';

 

编辑:数据库 本文来源:来就送 20元现金领取地址,  需要安装

关键词: