MySQL - Users and Permissions

  1. 1. 1.1 查看用户
    1. 1.1. > Host 中有两种情况 localhost, %
  2. 2. 1.2 创建用户
  3. 3. 2.1 查看 root 的权限
  4. 4. 2.2 自定义用户的权限
    1. 4.1. 给 dbman 用户配置权限。
  5. 5. 2.3 验证
  6. 6. 2.4 删除用户
  7. 7. 2.5 Disable remote root logins into MySQL

MySQL 用户、权限基本操作


## 1. MySQL 用户管理

MySQL 的用户管理是在一张系统数据库 mysql > user 里进行管理的。

用户的操作,都是对该库该表进行操作。

1.1 查看用户

1
SELECT User, Host FROM mysql.user;
1
2
3
4
5
6
7
+--------+-----------+
| User | Host |
+--------+-----------+
| dbman | % |
| root | % |
| root | localhost |
+--------+-----------+

> Host 中有两种情况 localhost, %

  • localhost 表示只能本地登录
  • % 表示支持远程登录

这两种登录模式是分别单独配置的,所以表里会有两条记录。

1.2 创建用户

1
CREATE USER 'dbman'@'%' IDENTIFIED BY 'password';
  • dbman 为用户名
  • % 为远程登录,可配置为 localhost
  • password 为登录密码

## 2. 权限基本操作

因为一个用户在远程和本地登录时可以有不同的权限,所以这里查看权限时,要加上 Host 条件的。

2.1 查看 root 的权限

1
SHOW GRANTS FOR 'root'@'%';

显示 root 在远程访问中有着所有的权限。

1
2
3
4
5
+-------------------------------------------------------------+
| Grants for root@% |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+

2.2 自定义用户的权限

给 dbman 用户配置权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 远程连接,所有数据库,所有权限
GRANT ALL PRIVILEGES ON *.* TO 'dbman'@'%';

-- 本地连接,所有数据库,所有权限
GRANT ALL PRIVILEGES ON *.* TO 'dbman'@'localhost';

-- 远程连接,所有数据库,所有权限
GRANT ALL PRIVILEGES ON *.* TO 'dbman'@'%';

-- 本地连接,指定数据库 (db_test),所有权限,并设连接密码
GRANT ALL PRIVILEGES ON db_test.* To 'dbman'@'localhost' IDENTIFIED BY 'password';

-- 远程连接,指定数据库,指定权限,并设连接密码
GRANT SELECT,UPDATE ON db_test.* To 'dbman'@'%' IDENTIFIED BY 'password';

-- After making changes to permissions/user accounts, make sure you flush the provilege tables using the following command:
FLUSH PRIVILEGES;

2.3 验证

1
SHOW GRANTS FOR 'dbman'@'%';
1
2
3
4
5
+------------------------------------+
| Grants for d2team@% |
+------------------------------------+
| GRANT USAGE ON *.* TO 'd2team'@'%' |
+------------------------------------+

2.4 删除用户

Just as you can delete databases with DROP, you can use DROP to delete a user altogether:

1
DROP USER ‘demo’@‘localhost’;

2.5 Disable remote root logins into MySQL

新的 DB 里都会给两个 root 的,一个是 % 另一个是 localhost,而 remote 是最危险的,别人可以通过该用户来进行攻击。

1
2
3
4
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');

-- After making changes to permissions/user accounts, make sure you flush the provilege tables using the following command:
FLUSH PRIVILEGES;

## 3. 权限的级别定义

Here is a short list of other common possible permissions that users can enjoy.

  • ALL PRIVILEGES - as we saw previously, this would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
  • CREATE - allows them to create new tables or databases
  • DROP - allows them to them to delete tables or databases
  • DELETE - allows them to delete rows from tables
  • INSERT - allows them to insert rows into tables
  • SELECT - allows them to use the Select command to read through databases
  • UPDATE - allow them to update table rows
  • GRANT OPTION - allows them to grant or remove other users’ privileges. To provide a specific user with a permission, you can use this framework:
1
GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;

## REF::

NAS

我觉得 双12 最大的做用是让人认清 双11 到底哪些东西没买后悔,哪些买了后悔。

于是在 0点0分,拿到了念念许久的 Synology 716+II

起因是网盘各家纷倒,最后百度也在限流,而且上传的东西不属于自己,也让人反感。

最后,这个小结写于一个月后,早已没有对设备的新鲜感,但更好的是可以有一些使用感受。

说到 NAS 有很多种方案

  • 在路由器上外挂个硬盘,现在就是这样做的,只是路由器把硬盘弄坏了。
  • 买个带功能的硬盘,像西数的 3T,价格便宜不少。
  • Synology,说实话买之前我不知道群晖有多好,而且价格超级贵。不过我只记得同事说的一句,群晖是卖软件的。

感受

群晖真的是卖软件的。

场景

个人有收藏照片,经典电影的习惯,虽然电影不怎么更新了,但照片的数量和大小是剧增。要感谢手机相机的提升。

之前,硬盘里的照片只是用来存的,而不是用来看的。没有功能,也就没有需求。

群晖中的一个功能,DS Photos,一下子打开了这种需求。因为无论是在手机上,电脑上,看照片太方便了。

然后就是由此产生的一堆的问题,比如照片归类,排序。之前一堆照片是没有用的,所以乱放也不知道,现在随便一点一看,全是问题。其实

Deploy Node Application in Docker with Capistrano

之前有尝试过 shipit,不过其方式,插件和 bug,都蛮让人失望的。


## Prepare
1
$ bundle init

修改 Gemfile 内容为以下:

1
2
3
source "http://ruby.taobao.org"

gem 'capistrano'

初始化当前目录为 Cap:

1
$ bundle exec cap install

会生成下面的一个目录结构(为简单,修改为prod.rb):

1
2
3
4
5
6
7
8
9
10
.
├── Capfile
├── config
│ ├── deploy
│ │ ├── prod.rb
│ │ └── staging.rb
│ └── deploy.rb
└── lib
└── capistrano
└── tasks

## Cap Config

deploy.rb 文件主要是配置所有发布环境的公共配置

config/deploy.rb
1
2
3
set :application, 'd2labs_beta'
set :deploy_user, 'deploy'
set :repo_url, 'git@github.org:lanvige/test.git'

除了公共配置文件外,每个环境都有自己的配置文件:

config/depoly/prod.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
set :stage, :production
set :branch, 'master'

# Extended Server Syntax
server '10.10.10.1', user: 'deploy', roles: %w{web app db}

# used in case we're deploying multiple versions of the same
# app side by side. Also provides quick sanity checks when looking
# at filepaths
set :full_app_name, "#{fetch(:application)}"

## where to put the app
set :deploy_to, "/home/#{fetch(:deploy_user)}/apps/#{fetch(:full_app_name)}"

在Deploy 前,我们还需要添加一些功能,将site-enabled/nginx.conf的配置文件添加到Remote Server下。


## Prepare
## Deploy

The Screen Resolution

我是一个显示控,多年前为了买 DELL 2412,花费巨资,当时的 1080P 感觉这是要用十年,结果两三年后,2K 出现了,能把屏幕一分为二,左右分屏而用。心痒,入了 DELL 2515h,再后来 4K 电视出来,升,5K iMac 出来,,,额,太想要了。

那这些 720p, 1080p, 2K, 4K, 5K 到底是什么意思呢?有些简称的确让人理解起来很方便,但随着分辨率和组合的增多,这些字母组合着实令人困扰,有时我自己也不清不楚,于是总结了一下。


## p & k

之前的叫法一直都是 p 结尾的,字母 p 意为逐行扫描 (progressive scan)。数字 1080 则表示垂直方向有 1080 条水平扫描线。也就是高 1080 个像素。

后来分辨率越来越大,在宽上超越了 1xxx 这个数值区间,达到了一个更大的数值。对显示分辨率的叫法也由 p 变为了以宽为主的 k。

这正是造成当前人们对分辨率概念混乱的原因,毕竟几十年我们在讨论电视分辨率时说的都是垂直分辨率,现在突然变成了意指水平分辨率的 4K电视,让人困惑。

而且 p 和 k 的叫法,所指的也只是主流的叫法
,不是每一家都这样叫的。如果你打开 youtube,你会看到它依然在用 p 作为主流显示,只是在边上备主 k。如:

p k
4320p 8K
2160p 4K
1440p HD

## 常见分辨率

水平用 k,垂直用 p

xK

叫法 x y alias devices
1K? 1280 720 HD (High Definition), 720p -
1280 1024 1.3K -
1680 1050 1050p P2213
2K 1920 1080 FHD (Full HD), 1080p, 准2K U241H
2048 1080 - -
2048 1152 QHD (Quad HD)真2K -
2560 1440 1440p, 超2K iMac 2012, U2515h, U2717d
4K 3840 2160 UHD (Ultra HD), 2160p, 准4K P2715Q, P2815Q
4096 2160 2160p, 真4K LG 31MU97
5K 5120 2800 2800p iMac 5K, UP2715K
8K 7680 4320 4320p -

过去的时代,是不用 k 来表示的,所以没有 1k 的概念。到了后来,才开始用水平表示法。才有了 k 的概念。

xP

name x y alias devices
720p 1280 720 720p -
1080p 1920 1080 - -

xxxxp 说的是分辨率的宽度。比如 1920x1080,就是 1080P3860x2160 就是 2160p


## 720p, 1080p

1080p(或全高清)

历史上,电视过去曾使用垂直分辨率来描述分辨率。因此1080p代表的是垂直分辨率。而几乎所有的高清电视的纵横比都是 1.78 : 1 (即16×9,又名“宽屏”),这意味着其水平分辨率为 1920 像素(即1920×1080)。

720p

720p 的像素数量大约为 1080p 的一半。目前,只有最小的电视和最便宜的电视采用720p分辨率,是向高清过渡的时代。


## 2k, 4k, 5k, 8k 分辨率

2K、4K 屏说的是分辨率的宽度。

2K 分辨率指的是屏幕分辨率达到了一种级别,指屏幕横向像素达到 2048 以上,垂直分辨率未指定。是国内数字影院的主流放映分辨率。

2K 分辨率有多种类别,最常见的显示器分辨率 2K 是指 2560×1440 (WQHD | Quad HD)

至于 2560x1440,有个说法: 因为 2560 既不靠 3K,也不靠 2K,所以正确叫法就是叫1440P。把这个分辨率叫成 2K 就是错误的。当然,所有人还是叫 2K。

4K 的主流分辨率是 4096x2160,也称 2160p 或超高清,但绝大多数人都更喜欢 4K 这一名称。

8K 的道理跟 4K 一样。如果你谈论的是电视,那么其水平像素和垂直像素均为 4K 电视的两倍:7680×4320。但这还没有成为一种电影分辨率,至少在现实中还未应用。我们距离8K电视成为主流还很遥远

MacBook, Router & WiFi Channel

周未因一个找不到 WiFi 信号的小问题,顺带研究了一把 WiFi Channel, Country, Router & MacBook 的关系,又长见识了。


## 找不到 5G

MacBook 会因连接 WiFi 2.4G 导致蓝牙键盘不灵,刚好本周未把本子带回家碰到同样的问题,上路由器上一看,不得了,清一色连接的都是 2.4G,而不是性能更好的 5G。

路由器把 2.4 和 5G 合并了,自动选择性能更好的模式。

于是就把路由器的模式关掉,也同时关掉了 2.4G 网络,只留下了 5G。然后很奇怪的问题就产生了,MacBook 间歇性的找不到 WiFi 信号。而且是找不到的时间居多,直致最后完全找不到,打开 2.4G 开关,使用正常。但同时,iPhone 6 Plus 等其它设备都可以正常使用。

这不符合极客精神,于是探究了下,打开路由器的设置,看到 5G 使用的信道是推荐的 36。试着换了一个信道,到 161,竟然好了。


## 信道与国家

在网上找到这么一张图,算是印证了自己的想法:

信道 36,40, 44, 48 在中国是禁用的。


## MacBook、Channel & Country

继续探索,找到 MacBook 的 WiFi 设置:

可以看到,电脑的 WiFi 接收器也有一个参数配置:

  • Country Code
  • Supported Channels

这里跟上图的说明是一致的,也证明了换成 161 成功的原因。

同时也可以看到下方 WiFi 信号的参数:

  • Country Code
  • Channels

如果把路由器的信道改成 36,就会从这个页面里消失。

也就是说,我的这个路由器违反了国家规定,可以开启 36-48 这几个信道,但 MacBook 非常遵守法规,于是就无法找到 36信道的 WiFi 信号


## 疑问:为什么 iPhone 6s 又能使用信道 36?

难以说明的是为什么,iPhone 是可以使用 36 信道的 5G WiFi?难道法规改了?

没有找到确定的法律,但确实是, 36-44,这几个信道在中国被启用了。

最新的标准,可以见这里: List of WLAN channels

看来,这个 2011 款的 MacBook Pro 真的是有点老了,同时出问题的 iMac 27 也是 2011 款的。😓


## 疑问: +1, -1

为什么有的 +1,有的 -1,有的没有 Country Code,不是很理解?

REF::

Nginx Config SSL Certificate from CA

几种 SSL 证书

  1. 域名验证 (DV) 证书可核实您对域名拥有所有权
  2. 而组织验证 (OV) 证书证明您拥有该域名并且您的组织是合法的。这让访客更加放心,因为欺诈性网站绝对无法通过这些检查。
  3. 扩展验证 (EV) SSL 为客户提供最高级别的安全保障 - EV SSL 申请人必须通过严谨的扩展验证流程。

当用户输入 EV SSL 加密的网站时,其浏览器中的地址栏会变绿。它是一种具有强烈视觉效果的“绿光”,可以告诉用户他们所在的网站很安全。

几家免费的证书申请

  • StartSSL 听说因违规被 Google, Apple 注消了根证书。
  • letsencrypt 只有三个月,看了教程,要装一个程序来申请和更新,和想像中的不一样,没细看。
  • Qiniu 我申请了,真的就等了24小时,一切都成功了,就是没收到邮件发来的证书。
  • Qcloud 腾讯云很快,差不多 20 分钟就一切都好了。

最后因为 Qcloud 拿到了证书,就选了它家。

操作

现在找到的教程都好老,还是要申请 key 和 CSR,在七牛里找了好久也没找到填这个的地方,后来 qcloud 里下载到证书后,才明白。

根本不需要

系统自动创建了 key,然后生成 crt 证书文件,最后把这两个文件按照各种不同的 web server 的要求,创建好打包下载,直接使用,太方便了。

绑定

拿到证书文件后,就需要在 nginx 里进行域名的绑定了。

一般来说 nginx 都是做端口转发的,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# NGINX site configuration

upstream app_server {
server 10.1.1.1:8081 max_fails=3 fail_timeout=0;
}

server {
listen 443;

server_name d2labs.cn;

ssl on;
ssl_certificate_key /etc/nginx/ssl/d2labs.cn.key;
ssl_certificate /etc/nginx/ssl/d2labs.cn.crt;

keepalive_timeout 10;

access_log /var/log/nginx/d2labs.access.log main;
error_log /var/log/nginx/d2labs.error.log;

error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;

# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 75M;
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
chunked_transfer_encoding on;


location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;

proxy_redirect off;

proxy_pass http://app_server;
}
}

如果我想禁止 HTTP,只开启 HTTPS 呢?

或者两个都想支持呢?


## REF:: ---

Docker 301 - Change Default Storage Location

docker

在阿里云的标准 ECS 上长时间实践中,发现一个问题,就是系统盘的大小很快就容易被写满了,于是不得不将 docker 的 image 默认位置进行修改,将文件写入到一个新的自定义的挂载点上。


## 阿里云配置实践

- 配置 EC 数据盘

新加的 100G 数据盘,是不会主动挂载的,需要手工操作,见:

我们将数据盘挂载到 /data,用于保存 Docker 的 Image 和数据使用。


## 指向 Docker 数据位置到 `/data` 上

文档参见:

Docker 1.12 新版本中,用了一个新的配置文件(如果文件不存在,可自行创建)。

/etc/docker/daemon.json

示例:

1
2
3
4
{
"graph": "/data/docker",
"registry-mirrors": ["http://[id].m.daocloud.io"]
}

重启后生效

1
$ service docker restart

旧的方法

如果你还能在网络上看到下面的这种配置方式,请知晓,这是一种很老的配置,已经被废弃了:

Docker 启动时,会读取一个配置文件,在 Ubuntu 中,位于 /etc/default/docker,通过设置 --graph 来改变 Docker 的存取位置。

DOCKER_OPTS=”$DOCKER_OPTS –graph=/data/docker”


## 新的目录结构

–-graph=/data/docker,会自动生成 /data/docker 目录(0700),并在该目录下创建 docker 相关文件。

1
2
3
4
5
6
7
8
9
.
|-- aufs
|-- containers
|-- image
|-- network
|-- swarm
|-- tmp
|-- trust
`-- volumes

## REF:: ---

Yarn in Action

  1. 1. Advantage
    1. 1.0.1. 开发环境的 global bin 迁移问题
    2. 1.0.2. package.json & yarn.lock
    3. 1.0.3. More:
  • 2. 使用技能
    1. 2.1. Install
    2. 2.2. Common
    3. 2.3. Upgrade
    4. 2.4. Cache
    5. 2.5. 配置国内源
    6. 2.6. 配置 node-sass
  • npm 每次安装都会去服务器上拉一次,超级慢,虽然有 registry。

    npm 没有指定版本锁定,如果开发者不遵循 semver 规则,会导致不同环境安装不同的版本,从而出现问题。


    Advantage

    完全代替,且有以下优势:

    • Cache,更快
    • Concurrency Download,更快
    • Version Locked,一致性,安全
    • 本地代理+缓存,这样,最少解决了速度问题,不需要每次安装都从服务器上去接,这样太慢,效率大大提升。
    • 使用多线程去下载,更快。
    • 更主要的是版本锁定,yarn.lock 这样,就避免了因版本不一致而出现的各种问题。

    开发环境的 global bin 迁移问题

    nvm 虽然解决了 node 的版本问题,但每次升级都要对 global 的命令进行迁移,也是一件很烦的事情。

    yarn 很好的解决了这个问题,在 macOS 上, yarn 的配置和文件目录被放置了在 ~/.config/yarn 下,global 的目录则对应在 ~/.config/yarn/global,这样,就和 nvm 脱离了关系。每次升级不再有 global 迁移的苦恼。

    package.json & yarn.lock

    • package.json: 是 npm 的项目配置,包括依赖文件。
    • yarn.lock: 存储着所有的依赖的版本(包括依赖的依赖)。

    More:


    使用技能

    Install

    1
    2
    $ brew update
    $ brew install yarn

    一般都会用 nvm 来安装 node,这时 brew 就要特殊处理下:

    1
    $ brew install yarn --ignore-dependencies

    Common

    1
    2
    3
    $ yarn add 
    $ yarn upgrade
    $ yarn remove

    Upgrade

    1
    $ yarn upgrade-interactive

    Cache

    可以直接把 cache 复制过去的,避免再次下载。

    1
    2
    3
    $ yarn cache ls
    $ yarn cache dir
    $ yarn cache clean

    ## - yarn config

    配置国内源

    配置 registry:

    1
    $ yarn config set registry https://registry.npm.taobao.org

    测试

    1
    $ yarn config get registry

    配置 node-sass

    node-sass 每次都会从 github 上下载文件,然后 github 是用 amazon s3,这个是被墙掉的,所以这里也需要配置它的下载源到国内。

    1
    $ yarn config set sass_binary_site http://npm.taobao.org/mirrors/node-sass -g

    测试

    1
    $ yarn config get sass_binary_site

    ## REF::