Oracle11gR2将A用户下的所有table,packe的权限赋予给B用户的方法
以下操作实现把HONGSINNC用户下的表,授权给MDATA用户,使其有select权限,步骤如下:
1、使用DBA帐号HONGSINNC登录PL/SQL,执行查询如下:
select 'grant select on HONGSINNC.'||tname||' to MDATA;' from tab
2、将查询结果导出为csv文件,打开里面即有对应的grant语句,全部执行,即可;
空杯心态,勿忘初心;但行好事,莫问前程。
以下操作实现把HONGSINNC用户下的表,授权给MDATA用户,使其有select权限,步骤如下:
1、使用DBA帐号HONGSINNC登录PL/SQL,执行查询如下:
select 'grant select on HONGSINNC.'||tname||' to MDATA;' from tab
2、将查询结果导出为csv文件,打开里面即有对应的grant语句,全部执行,即可;
1、算术运算比较运算符(bash自身不能比较浮点数)
-eq 等于 [ $num1 -eq $num2 ]
-ne 不等于 [ 100 -ne $num1 ]
-lt 小于 [ 100 -lt `expr $num1 + $num2` ]
-le 小于或等于 [ 100 -le `expr $num1 \* $num2` ]
-gt 大于 [ 100 -gt `expr $num1 / $num2` ]
-ge 大于或等于 [ 100 -ge `expr $num1 % $num2` ]
2、字符串比较运算符
-z string 如果 string 长度为零,则为真 [ -z "`ps aux | grep mysql`" ]
-n string 如果 string 长度非零,则为真 [ -n "$string" ]
【注意】 $string 一定要放在双引号里面 "$string",否则使用 -n -z 的结果都为真!
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$str1" != "Snail" ]
string1 == string2 如果 string1 与 string2 相同,则为真 [ "$str1" == "$str2" ]
(上面用一个 = 也可以,在严格的 POSIX 兼容下使用)
string1 < string2 如果 string1 按字典顺序比较小于 string2,则为真
string1 > string2 如果 string1 按字典顺序比较大于 string2,则为真
3、文件比较运算符
-a filename 如果 filename 存在,则为真 [ -e $HOME/.bashrc ]
-e filename (同上)
-b filename 如果 filename 存在,并且是块文件,则为真 [ -e /dev/loop0 ]
-c filename 如果 filename 存在,并且是字符文件,则为真 [ -e /dev/ttyS0 ]
-d filename 如果 filename 存在,并且为目录,则为真 [ -d /home/snail ]
-f filename 如果 filename 存在,并且为常规文件,则为真 [ -f /dev/ttyS0 ]
-g filename 如果 filename 存在,并且为set-group-id,为真 [ -f $HOME/ak47 ]
-h filename 如果 filename 存在,并且为符号连接,则为真 [ -h /bin/vi ]
-L filename (同上)
-k filename 如果 filename 存在,并且设置了sticky位,为真 [ -k /bin/ping ]
-p filename 如果 filename 存在,并且为有名管道(FIFO),真 [ -p /tmp/pipe ]
-r filename 如果 filename 存在,并且可读,则为真 [ -r /etc/passwd ]
-s filename 如果 filename 存在,并且大小不为零,为真 [ -s ./none-zero ]
-u filename 如果 filename 存在,并且为set-user-id,为真 [ -f $HOME/ak47 ]
-w filename 如果 filename 存在,并且可写,则为真 [ -w /var/log/mail ]
-x filename 如果 filename 存在,并且可执行,则为真 [ -x ./start.sh ]
下面这些不常用的:
-t fd 如果文件描述符被打开并指向一个终端,则为真 [ -t /proc/1/fd/10 ]
【提示】在 /proc/进程号/fd 下可以找到文件描述符:)
-O filename 如果 filename 存在,并且被有效用户ID所拥有,则为真
-G filename 如果 filename 存在,并且被有效组ID所拥有,则为真
-S filename 如果 filename 存在,并且为一个socket,则为真 [ -S /tmp/mysql.sock ]
-N filename 如果 filename 存在,并且在上次读取后被修改过,则为真
-o optname 如果 shell 选项 optname 被开启,则为真
【提示】使用 set -o 来查看
file1 -nt file2 如果 file1 比 file2 新,或者 file1 存在 file2 不存在,则为真
file1 -ot file2 如果 file1 比 file2 旧,或者 file2 存在 file1 不存在,则为真
file1 -ef file2 如果 file1 和 file2 都指向同样的设备(device)和索引节点号(inode numbers),则为真
【提示】查看文件的索引节点可以用 ls -i 选项
以下是shell中判断字符串包含的方法:
方法一:利用grep查找
先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果
strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
echo "包含"
else
echo "不包含"
fi
如果结果不为空,说明strA包含strB。如果结果为空,说明不包含。
这个方法充分利用了grep 的特性,最为简洁。
方法二:利用字符串运算符
strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then
echo "包含"
else
echo "不包含"
fi
利用字符串运算符 =~ 直接判断strA是否包含strB。(这不是比第一个方法还要简洁吗!)
方法三:利用通配符
A="helloworld"
B="low"
if [[ $A == *$B* ]]
then
echo "包含"
else
echo "不包含"
fi
这个也很easy,用通配符*号代理strA中非strB的部分,如果结果相等说明包含,反之不包含。
方法四:利用case in 语句
thisString="1 2 3 4 5" # 源字符串
searchString="1 2" # 搜索字符串
case $thisString in
*"$searchString"*) echo Enemy Spot ;;
*) echo nope ;;
esa
这个就比较复杂不推荐;
KVM部署在Linux物理机的时候使用桥接网络比较方便,虚拟机可以和宿主机一样的网络进行上网数据交互,查看网卡em1的设置:
cat /etc/sysconfig/network-scripts/ifcfg-em1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTRPOTO=none
BRIDGE=br0
#IPADDR=10.0.0.6
#NETMASK=255.255.255.0
#GATEWAY=10.0.0.1
#DNS1=10.0.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=em1
UUID=009de6fd-475e-4d1e-b1fc-c12f57190113
DEVICE=em1
ONBOOT=yes
创建br0虚拟网卡配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
PROXY_METHOD=none
BOOTPROTO=static
IPADDR=10.0.0.6
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
DNS1=10.0.0.1
DEFROUTE=yes
ONBOOT=yes
绑定桥接并重启网络服务:
brctl addif br0 em1
systemctl restart network
正常情况下就可以使用br0桥接了,如果不能链接,尝试删除br0绑定:
brctl delif br0 em1 #解除绑定
ifconfig br0 down #关闭br0
brctl delbr br0 ##删除br0
下载MegaCli-8.07.14-1
cd /opt
wget http://mirror.cogentco.com/pub/misc/MegaCli-8.07.14-1.noarch.rpm
安装:
rpm -ivh MegaCli-8.07.14-1.noarch.rpm
安装完毕后会在/opt/下面生成MegaRAID/MegaCLI目录,直接执行即可:
./MegaCli64 -FwTermLog -Dsply -aALL > /tmp/ttylog.txt
创建 RAID 控制器日志 (ttylog)
./MegaCli64 -PDList -aALL > /tmp/disks.txt
创建一个列表, 其中包含有关已安装的 RAID 控制器、虚拟磁盘和硬盘的信息
./MegaCli64 -LDInfo -LALL -aALL > /tmp/LDinfo.txt
创建包含有关现有 RAID 卷和配置的信息的列表
./MegaCli64 -AdpAllInfo -aALL > /tmp/Adapterinfo.txt
创建包含 RAID 控制器设置信息的列表
./MegaCli64 -AdpBbuCmd -aALL > /tmp/Battery.txt
创建 RAID 控制器 (充电状态、学习周期等) 的电池状态的详细列表
./MegaCli64 -AdpEventLog -IncludeDeleted -f deleted.txt -aALL
创建 RAID 控制器日志 (ttylog), 其中包含自第一个控制器初始化后的所有信息
(注意: 此文件将始终保存在了根文件夹中)
贴一张RAID 卷和配置的信息的图:
MegaCli命令使用:
查看所有物理磁盘信息
MegaCli -LDInfo -Lall -aALL 查raid级别
MegaCli -AdpAllInfo -aALL 查raid卡信息
MegaCli -PDList -aALL 查看硬盘信息
MegaCli -AdpBbuCmd -aAll 查看电池信息
MegaCli -FwTermLog -Dsply -aALL 查看raid卡日志
MegaCli常用参数介绍
MegaCli -adpCount 【显示适配器个数】
MegaCli -AdpGetTime –aALL 【显示适配器时间】
MegaCli -AdpAllInfo -aAll 【显示所有适配器信息】
MegaCli -LDInfo -LALL -aAll 【显示所有逻辑磁盘组信息】
MegaCli -PDList -aAll 【显示所有的物理信息】
MegaCli -AdpBbuCmd -GetBbuStatus -aALL |grep ‘Charger Status’ 【查看充电状态】
MegaCli -AdpBbuCmd -GetBbuStatus -aALL【显示BBU状态信息】
MegaCli -AdpBbuCmd -GetBbuCapacityInfo -aALL【显示BBU容量信息】
MegaCli -AdpBbuCmd -GetBbuDesignInfo -aALL 【显示BBU设计参数】
MegaCli -AdpBbuCmd -GetBbuProperties -aALL 【显示当前BBU属性】
MegaCli -cfgdsply -aALL 【显示Raid卡型号,Raid设置,Disk相关信息】
MegaCli -LDGetProp -Cache -L0 -a0 查看磁盘缓存策略
VIA:
https://www.cnblogs.com/276815076/p/3282422.html
https://www.dell.com/support/article/us/en/19/sln292232/%E9%80%9A%E8%BF%87%E4%BA%86%E8%A7%A3%E5%8E%8B-raid-%E6%8E%A7%E5%88%B6%E5%99%A8%E6%97%A5%E5%BF%97?lang=zh
视图其实就是一张虚拟的表,所有也可以认为是一张表,MySQL查询所有视图:
show table status where comment='view'\G;
查询视图结构:
DESC master_data_user;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| username | varchar(255) | YES | | NULL | |
| org_id | varchar(255) | YES | | NULL | |
| status | varchar(255) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| org_name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
| telephone | varchar(255) | YES | | NULL | |
| post | varchar(255) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
或者
SHOW TABLE STATUS LIKE 'master_data_user'\G;
*************************** 1. row ***************************
Name: master_data_user
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
1 row in set (0.00 sec)
创建data_view用户并授予单个视图权限:
grant select,show view on escdb.master_data_org to data_view@'192.168.%' IDENTIFIED BY 'xxxxxxx';
grant select,show view on escdb.master_data_user to data_view@'192.168.%' ;
flush privileges;
data_view登录后即只能查看master_data_org和master_data_user视图;
查看当前登录用户权限:
show grants;
+----------------------------------------------------------------------------------+
| Grants for data_view@192.168.% |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'data_view'@'192.168.%' |
| GRANT SELECT, SHOW VIEW ON `escdb`.`master_data_org` TO 'data_view'@'192.168.%' |
| GRANT SELECT, SHOW VIEW ON `escdb`.`master_data_user` TO 'data_view'@'192.168.%' |
+----------------------------------------------------------------------------------+
3 rows in set (0.00 sec)