精华内容
下载资源
问答
  • oracle数据库user用户权限配置

    千次阅读 2018-07-22 21:07:48
     解决办法:将数据库连接和资源都赋给创建的user对象以及session权限 转载大神的解析: 用户至少需要会话的权利,否则连接也不成功; 用户在会话的权利上,应该有其他操作的权利;解决方法: www.2cto.c...

           1.使用plsql创建user对象时,出现 insufficient privileges错误,如图所示

                           解决办法:将数据库连接和资源都赋给创建的user对象以及session权限

    转载大神的解析:

    用户至少需要会话的权利,否则连接也不成功;

    用户在会话的权利上,应该有其他操作的权利;解决方法:  www.2cto.com  

    1grant connect, resource to aaaa;

    2grant create session to aaaa; 

    Oracle的安全 第一:用户管理*******************************************

    用户至少需要会话的权利,否则连接也不成功;用户在会话的权利上,应该有其他操作的权利;Oracle的用户和口令不区分大小写,真是让人大跌眼镜;Oralce中,所有用户必须明确被授权,才可以操作;
     SQL Server中,创建的用户自动就拥有了一些权限;Oracle不依赖操作系统;SQL Server依赖Windows;

    MicroSoft假定大多数用户都是合法用户,采取乐观态度;Oracle首先假定用户都是不安全的,采取悲观态度;Oracle中的用户是互相隔离的,称为用户模式;
     内置用户:  www.2cto.com   sys,网络管理员,最高权限;     当你试图输入了用户名:sys          密码:通用     之后,你发现连接不上;     而输入 用户名:system         密码:通用     或者    用户名:scott          密码:tiger
          的时候都可以连接,所以你认为     sys的权限没有system高;     其实正是因为sys的权限高,所以你必须以     dba的身份来登陆:sys/通用 as sysdba//可以使用数据字典user_users来查看当前用户管理的用户:  select * from user_users; 而dba_users可以查看dba管理的用户; system,只管理本机上的数据库; 而all_users查看所有用户,只能由dba来查看; ******创建用户:  www.2cto.com   create user 用户名 identified by 口令 [externally] [default tablesapce 表空间名] [temporary tablespace 临时表空间名] [quota 整数 K|M|unlimited on 表空间名]//注意:创建用户必须有dba的权限;
     ******查询用户: 其实就是对表user_users/dba_users/all_users进行查询, 只不过这里不把他们叫表,叫数据字典;而且数据字典是系统 维护的;

    *******修改用户: alter user.....//后面和创建一样;Oracle中一个实例就是一个数据库,这个数据库相当与SQL Server的全部数据库;Oracle的一个数据库被分为很多个表空间,每个表空间相当于SQL Server中的一个数据库;   实例演示:create user student_useridentified by studentdefault tablespace userstemporary tablespace tempquota 5m on usersquota 3m on temp
     /其中,users,temp都是内置的表空间,student_user在users里有5m空间,在temp里有3m;新创建的用户是没有权利的:SQL> conn student_user/student;ERROR:  www.2cto.com  ORA-01045: user STUDENT_USER lacks CREATE SESSION privilege; logon denied警告: 您不再连接到 ORACLE。 

    *****限制用户 锁定:alter user 用户名 account lock;  效果:  SQL> alter user student_user account lock;  用户已更改。  SQL> conn student_user/student;  ERROR:  ORA-28000: the account is locked  警告: 您不再连接到 ORACLE。 解锁:alter user 用户名 account unlock; 口令无效:alter 用户名 password expire; 当用户创建了很多表,  如果直接删除用户,它下面的表都将被删除,所以我们可以  只使得它的口令无效;
     //可见,表是用户的手下,用户没了,用户创立的表,占用的空间都就没了;

    //所以,一般情况下,我们不要删除用户;****删除用户:  www.2cto.com   drop user 用户名[cascade] //cascade是强制删除,即使有别人正在用这个用户的表;

    //数据库管理语句是自动结束事务的,没有rollback的机会;

     第二:权限管理***********************************************

    授权:grant [系统特权名] [角色] [on 被授权操作表名] to [用户名列表] [public][with admin option] 如果是dcl语句,就不用on 被授权操作表名 grant all on student to public:把对student的所有权限授予所有用户; 数据字典:user_sys_privs select * from user_sys_privs权限收回:  www.2cto.com   revoke 权限列表 on 表 from 用户; SQL> revoke create table from iam; 撤销成功。
     撤消只是撤消本次授权的权限,所以如果某个用户原来就有某个权利,而你又给它授了同样的一个权利,然后你收回这个权限的时候,它原来就具有的这个权利还是有的;

    第三:角色管理*****************************************

    因为一个用户可能需要某些权限的集合,当我们得到一新的用户的时候,我们需要给一个用户依次授权每个它需要的权限;角色正是一个权限的集合,用户可以直接被授予这个角色,用户自然就拥有了它的角色所拥有的权利;
     创建角色: create role 角色名 [no identified|identified by 口令|externally] not identified:指出授予该角色的用户在使用时不需要检验; identified by:指出授予该角色的用户在使用set role命令时需要检验;   www.2cto.com  收回权限:revoke 权限 from 角色名;
     //角色就是权限的集合;实例:create role student_role/grant create table,create session,create view to student_role/grant student_role to scott/revoke create view from student_role/

    角色的某个权限被收回的时候,被授予该角色的用户的该权限也相应被收回;

    展开全文
  • MySQL用户权限管理

    千次阅读 2019-03-28 12:51:58
    05.废除用户权限 mysql认证方式: root(用户名)@localhost(登录主机的地址–客户端) 密码 客户端: 要通过什么用户通过什么密码登录服务器 我们要关注:用户名 密码 要登录的服务器的ip地址 服务器提供的mysql服务的...

    01.了解mysql的默认用户
    02.权限的分类
    03.用户的创建
    04.给用户授权
    05.废除用户权限

    mysql认证方式:
    root(用户名)@localhost(登录主机的地址–客户端) 密码
    客户端: 要通过什么用户通过什么密码登录服务器
    我们要关注:用户名 密码 要登录的服务器的ip地址 服务器提供的mysql服务的端口号
    服务器: 验证客户端的登录信息是否在用户表里
    验证:用户名(user) 密码(authentication_string) 客户端的登陆主机(host登陆地址)
    如果以上三个信息都在mysql.user(涉及到客户端连接)表中,登陆成功
    01.了解mysql的默认用户
    1.在低版本(5.6及之前版本)中,有匿名用户存在,不存在用户=匿名用户,匿名用户的权限很低,有时候正常用户登陆进去会被认为是匿名用户,导致什么也做不了,所以在低版本中登陆进去先操作delect from mysql.user where user=’’;删除匿名用户.
    2.当全新的MySQL数据库安装完毕后,系统就为我们默认地创建了几个用户:管理员用户root以及匿名用户。通过查看名为mysql的系统数据库中的user表,可以看到所有的用户名及其全局权限(Global Privileges).
    mysql> select user,host from mysql.user;
    ±--------------±----------+
    | user | host |
    ±--------------±----------+
    | mysql.session | localhost |
    | mysql.sys | localhost |
    | root | localhost |
    ±--------------±----------+
    6 rows in set (0.00 sec)
    mysql>
    查看某个用户有那些权限:
    mysql> show grants for ‘mysql.sys’@‘localhost’;
    ±--------------------------------------------------------------+
    | Grants for mysql.sys@localhost |
    ±--------------------------------------------------------------+
    | GRANT USAGE ON . TO ‘mysql.sys’@‘localhost’ |
    | GRANT TRIGGER ON sys.* TO ‘mysql.sys’@‘localhost’ |
    | GRANT SELECT ON sys.sys_config TO ‘mysql.sys’@‘localhost’ |
    ±--------------------------------------------------------------+
    3 rows in set (0.00 sec)
    mysql>
    Usage是什么权限呢?
    mysql> show privileges;
    Usage | Server Admin | No privileges - allow connect only 没有权限,只允许连接

    想看一个用户是否有全局权限,可以
    mysql> select * from mysql.user\G;全是y的有全局权限
    3.mysql的默认用户
    3.1‘mysql.sys’@’localhost’:
    用于 sys schema中对象的定义。使用 mysql.sys 用户可避免DBA重命名或者删除 root用户时发生的问题。该用户已被锁定,客户端无法连接。
    3.2‘mysql.session’@’localhost’:
    插件内部使用来访问服务器。该用户已被锁定,客户端无法连接。
    3.3‘root’@’localhost’:
    其用于管理。该用户拥有所有权限,可执行任何操作。
    注意:
    权限:
    不要轻易的授权给用户超级权限
    授予给用户的权限只要满足用户的操作即可(层层审核),不要赋予多余的权限
    db1 t1 t2 dml(select/insert/delete/update)
    db1.* t3(财务数据) delete
    3.4了解不存在用户(匿名用户)的默认行为
    匿名用户风险:可能真实存在在数据库的用户,在登录时被当做匿名用户,这时 候访问数据库受到限制
    匿名用户对于数据库来说没有任何有价值的操作
    真实存在的用户有生产库/业务库的真实权限
    但是匿名用户对于数据库自身来说是没有任何风险的
    登录数据库后:
    mysql> select user,host from mysql.user;
    检查下数据库中是否有匿名用户
    匿名用户的特点是mysql.user表中user列值=’’;是空不是null.
    示例:下面在本机以一个不存在的用户12345来连接MySQL,看他能做些什么
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    可见,匿名用户有权看到两个数据库:一个名为information_schema的系统数据库和一个test数据库。它对test数据库拥有全部权限,可以在里面创建表,进行DML操作等。对information_schema系统数据库中的表拥有查询权限,但是不能执行DML操作
    低版本数据库存在,高版本已经不允许匿名用户登录数据库,系统中不存在匿名用户

    02.权限的分类
    权限分类:
    一.数据库作用范围权限分类:
    授权语句:Grant 权限操作分类 on 数据库作用范围权限分类 to 某个用户;
    1.全局权限Global Privileges
    它是管理权限,应用到服务器上的所有数据库上。要授予全局权限,使用 ON .的语 法。 MySQL 把全局权限保存在 mysql.user 表中
    作用在提供mysql服务的实例下所有数据库
    授予:
    .
    :所有数据库的所有表
    记录到mysql.user表中
    2.数据库权限Database Privileges
    应用到某个特定数据库的所有对象上。要授予数据库权限,使用 ON db_name.* 的语 法。 MySQL 把数据库权限保存在 mysql.db 表中
    作用在某些特定数据库
    拥有特定数据库的所有权限
    授予:拥有db_name.* db_name数据库下的所有表(对象)的权限
    记录到mysql.db表中
    3.表权限Table Privileges
    应用到某个特定表的所有列上。要授予表权限,使用 ON db_name.tbl_name 的语法。 MySQL 把表权限保存在 mysql.tables_priv 表中
    作用在特定的表
    授予:db_name.table_name
    记录到mysql.table_priv表中
    二.权限操作分类:逗号分隔
    1.列权限Column Privileges
    应用到某个特定表的单个列上。要授予列权限,必须在权限名称后面跟小括号,其中写 上列名。 MySQL 把列权限保存在 mysql.columns_priv 表中
    grant select (id) on test.a to ‘ceshi2’@‘localhost’;
    作用在特定表的特定列上
    授予:在权限操作分类中体现列权限 select(col_name)
    记录到mysql.columns_priv表中 filed(列,column)
    2.存储过程(例程)权限Stored Routine Privileges
    应用到存储过程和函数上。 MySQL 把存储例程权限保存在 mysql.procs_priv表中
    作用在存储过程和函数
    记录到mysql.procs_priv procedure
    3.代理用户权限Proxy User Privileges
    使一个用户成为另一个用户的代理。 MySQL 把代理用户权限保存在 mysql.proxies_priv 表中
    作用是使一个用户成为另一个用户的代理
    记录到mysql.proxies_priv表中 proxy
    注意:
    grant option:表示我自己有的权限可以授权给别人
    All:谨慎对待,包含着管理数据库的权限
    在mysql.user表中,除了grant_priv是N外,所有的_priv结尾的列值都是Y
    Levels:表示级别
    event:mysql的时间调度,linux下的crontab
    在grant和revoke语句中可用的权限如下表所示:
    权限名称 含义及授予级别
    ALL [PRIVILEGES] 授予某个特定级别的所有权限,除了 GRANT OPTION权限
    ALTER 允许使用ALTER TABLE语句。Levels: Global, database, table
    ALTER ROUTINE 允许修改或删除存储例程。Levels: Global, database, procedure
    CREATE 允许创建数据库和表。Levels: Global, database, table
    CREATE ROUTINE 允许创建存储例程。Levels: Global, database.
    CREATE TABLESPACE 允许创建、修改、删除表空间和日志文件组。Level: Global.
    CREATE TEMPORARY TABLES 允许创建临时表。Levels: Global, database.
    CREATE USER 允许使用 CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES语句。Level: Global.
    CREATE VIEW 允许创建和修改视图。Levels: Global, database, table.
    SHUTDOWN 允许使用 mysqladmin shutdown。Level: Global.
    DELETE 允许删除表中的行。Level: Global, database, table.
    DROP 允许删除数据库、表或者视图。Levels: Global, database, table.
    EVENT 允许使用事件。Levels: Global, database.
    EXECUTE 允许用户执行存储例程。Levels: Global, database, table.
    FILE 允许用户使用LOAD DATA INFILE读写文件。 Level: Global.
    GRANT OPTION 允许你把自己拥有的权限授给其它用户或者从其它用户那里废除。Levels: Global, database, table, procedure, proxy.
    INDEX 允许创建或删除索引。Levels: Global, database, table.
    INSERT 允许向表中插入行。Levels: Global, database, table, column.
    LOCK TABLES 允许使用LOCK TABLES 语句。 Levels: Global, database.
    PROCESS 允许使用SHOW PROCESSLIST语句查看正在运行的进程。 Level: Global.
    PROXY 允许用户代理。Level: From user to user.
    REFERENCES 允许创建外键。 Levels: Global, database, table, column.
    RELOAD 允许使用 FLUSH 语句。 Level: Global.
    SELECT 允许查询表。 Levels: Global, database, table, column.
    SHOW DATABASES 允许使用SHOW DATABASES 语句。 Level: Global.
    SHOW VIEW 允许使用SHOW CREATE VIEW语句。 Levels: Global, database, table.
    SUPER 允许使用其它管理语句。例如:CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL和mysqladmin debug 等。Level: Global.
    TRIGGER 允许触发器操作。Levels: Global, database, table.
    UPDATE 允许更新表中的行。Levels: Global, database, table, column.
    USAGE “no privileges”的同义词
    权限检查顺序
    Mysql数据库下的表user、db、tables_priv、columns_priv、procs_priv、proxies_priv共同构成授权表
    权限检查顺序如下图:
    在这里插入图片描述
    03.用户的创建
    大写的直接复制
    mysql> ? create user
    Name: ‘CREATE USER’
    Description:
    Syntax:(语法)
    CREATE USER syntax for MySQL 5.7.6 and higher:
    The CREATE USER statement creates new MySQL accounts. It enables
    account authentication properties to be established. As of MySQL 5.7.6,
    it is also possible to establish authentication, SSL/TLS, and
    resource-limit properties, account password expiration, and account
    locking and unlocking.
    To use CREATE USER, you must have the global CREATE USER privilege or
    the INSERT privilege for the mysql database. When the read_only system
    variable is enabled, CREATE USER additionally requires the SUPER
    privilege.
    An error occurs if you try to create an account that already exists.
    As of MySQL 5.7.8, the IF NOT EXISTS clause can be used, which causes
    the statement to produce a warning for each named account that already
    exists, rather than an error.
    For each account, CREATE USER creates a new row in the mysql.user
    table. The row reflects the properties specified in the statement.
    Unspecified properties are set to their default values.
    Example 1: Create an account that uses the default authentication
    plugin and the given password. Mark the password expired so that the
    user must choose a new one at the first connection to the server:
    CREATE USER ‘jeffrey’@‘localhost’
    IDENTIFIED BY ‘new_password’ PASSWORD EXPIRE;
    Example 2: Create an account that uses the sha256_password
    authentication plugin and the given password. Require that a new
    password be chosen every 180 days:
    CREATE USER ‘jeffrey’@‘localhost’
    IDENTIFIED WITH sha256_password BY ‘new_password’
    PASSWORD EXPIRE INTERVAL 180 DAY;
    mysql>

    CREATE USER user_specification [, user_specification] …
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] …}]
    [WITH resource_option [resource_option] …]
    [password_option | lock_option] …
    user_specification:
    user_name [ auth_option ]
    auth_option: {认证选项
    IDENTIFIED BY ‘auth_string’
    | IDENTIFIED BY PASSWORD ‘hash_string’
    | IDENTIFIED WITH auth_plugin
    | IDENTIFIED WITH auth_plugin AS ‘hash_string’
    | IDENTIFIED WITH auth_plugin BY ‘auth_string’
    }
    ssl_option: {加密连接选项
    SSL | X509 | CIPHER ‘cipher’
    | ISSUER 'issuer‘ | SUBJECT ‘subject’
    }
    resource_option: {使用资源选项
    MAX_QUERIES_PER_HOUR count
    | MAX_UPDATES_PER_HOUR count
    | MAX_CONNECTIONS_PER_HOUR count
    | MAX_USER_CONNECTIONS count
    }
    password_option: {密码过期选项
    PASSWORD EXPIRE --立即过期
    | PASSWORD EXPIRE DEFAULT --360天
    | PASSWORD EXPIRE NEVER
    | PASSWORD EXPIRE INTERVAL N DAY
    }
    lock_option: {账户锁定选项
    ACCOUNT LOCK
    | ACCOUNT UNLOCK
    }

    Mysql登录方式:
    1.本地socket方式
    mysql -uroot -p -S /tmp/mysql.sock
    2.网络方式
    127.0.0.1-----识别成了localhost ::1
    IP地址-------网络

    注意:上述语法中,在MySQL 5.7.6之前,只有第1行的create user子句
    和其它数据库不同,MySQL使用用户名、密码和登录位置来验证用户
    示例1:创建一个新用户demo,密码为demo,允许从本机登录
    create user ‘demo’@‘localhost’ identified by ‘demo’;
    注意:用户名和主机名要分别用引号括起来(如果用户名没有特殊字符,主机名没有特殊字符和通配符%,也可以不加引号)。密码必须用引号括起来
    如果不指定主机名,默认的主机名是百分号%,它代表任意主机
    **示例2:*创建一个新用户demo1,密码为demo1,允许从任意主机登录
    create user ‘demo1’ identified by ‘demo1’;
    或者
    create user ‘demo1’ @’%’ identified by ‘demo1’;
    示例3:创建一个新用户demo2,没有密码,允许从任意主机登录
    create user ‘demo2’;
    注意:如果两个用户具有相同的用户名但是主机名不同,MySQL把他们看做不同的用户
    如果创建的用户已经存在,则抛出异常
    注意:select user();查看当前用户
    当create user语句执行成功后,便在授权表mysql.user中写上一行
    示例4:查询所有的用户账户
    select user,host,authentication_string from mysql.user;
    一个新用户创建出来后,它可以连接到数据库,并有权看到information_schema的系统数据库。对information_schema系统数据库中的表拥有查询权限,但是不能执行DML操作。如果还想进行其它操作,必须给他授权
    修改用户名
    语法:该语句不影响用户的密码
    RENAME USER old_user TO new_user
    [, old_user TO new_user] …
    示例5:将用户demo1和demo2分别改名为newdemo1和newdemo2
    rename user
    ‘demo1’@‘localhost‘ to newdemo1’@‘127.0.0.1’,
    ‘demo3’@’%’ to ‘newdemo2’@‘127.0.0.1’;
    注意:修改主机名的时候一定要写上@主机名,不然系统会删除原来的用户,新建一个用户.
    修改密码
    SET PASSWORD [FOR user_name] = password_option;
    password_option: {
    PASSWORD(‘auth_string’)
    | ‘auth_string‘ --只适合5.7.6及其之后的版本
    | ‘hash_string‘ --只适合5.7.6之前的版本
    }
    ‘auth_string’:未加密的明文字符串密码。PASSWORD函数将其加密后保存。 ‘hash_string’:已经加密的密码
    注意:从5.7.6 版本开始,该语句不提倡使用( is deprecated )。使用ALTER USER语句代替:
    ALTER USER user_name IDENTIFIED BY 'auth_string‘;
    示例6:修改自己的密码
    set password=password(‘123’);
    如果你具有mysql数据库的update权限,就可以修改别人的密码
    示例7:修改demo用户的密码
    set password for demo@127.0.0.1 =password(‘123’);
    04.给用户授权
    GRANT priv_type [(column_list)]
    [, priv_type [(column_list)]] …
    ON [object_type] priv_level
    TO user_specification [, user_specification] …
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] …}]
    [WITH {GRANT OPTION | resource_option} …]
    object_type: {
    TABLE | FUNCTION | PROCEDURE
    }
    priv_level: {
    * | . | db_name.
    | db_name.tbl_name
    | tbl_name | db_name.routine_name
    }
    user_specification:
    user_name [ auth_option ]
    auth_option: { # As of MySQL 5.7.6
    IDENTIFIED BY ‘auth_string’
    | IDENTIFIED BY PASSWORD ‘hash_string’
    | IDENTIFIED WITH auth_plugin
    | IDENTIFIED WITH auth_plugin AS ‘hash_string’
    | IDENTIFIED WITH auth_plugin BY ‘auth_string’
    }
    ssl_option: {
    SSL | X509 | CIPHER 'cipher’ | ISSUER ‘issuer’
    | SUBJECT ‘subject’
    }
    resource_option: {
    | MAX_QUERIES_PER_HOUR count
    | MAX_UPDATES_PER_HOUR count
    | MAX_CONNECTIONS_PER_HOUR count
    | MAX_USER_CONNECTIONS count
    }
    授予表权限
    注意:如果被授权的用户不存在,那么grant语句会自动创建新的账户,除非设置参数sql_mode包含“NO_AUTO_CREATE_USER” 。

    mysql> grant all on test.a to ‘bbb’@‘localhost’;
    ERROR 1133 (42000): Can’t find any matching row in the user table
    mysql> grant all on test.a to ‘bbb’@‘localhost’ identified by ‘123’;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    mysql> show warnings;
    ±--------±-----±--------------------------------------------------------------------------------------+
    | Level | Code | Message |
    ±--------±-----±----------------------------------------------------------------------------------------+
    | Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement. |
    ±--------±-----±---------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    授予列权限
    示例9:授予用户bob可以对test.a表的id和name列进行更新
    grant update(id,name)
    on test.a
    to ‘bob’@‘localhost’;
    注意:权限都是单独授予的,对某个表具有update权限不会导致自动得到select权限
    授予数据库权限
    表权限只针对某一张表,可针对整个数据库授权
    示例10:授予bob可以对test数据库中的所有表进行查询
    grant select on test.* to bob;
    示例11:授予jim在 test数据库中创建、修改、删除表的权限以及创建视图的权限
    grant create,alter,drop,create view on test.* to jim;
    授予全局权限
    示例12:授予jim可以对当前数据库中的所有表进行查询
    grant select on * to jim;
    *号表示当前数据库
    授予全局权限,应用到所有数据库上
    示例13:授予jim可以创建、删除数据库以及对所有数据库中的所有表进行create、alter和drop
    grant create,alter,drop on . to jim;
    示例14:授予jim可以创建新用户
    grant create user on . to jim;
    示例15:授予newroot1具有和root@localhost一样的权限
    grant all on . to ‘newroot1’@’localhost’ with grant option;
    查看自己的权限:
    show grants;
    权限的传递
    with grant option子句
    通过在grant语句的最后使用该子句,就允许被授权的用户把得到的权限继续授给其它用户
    示例16:授予jim对ceshi表具有select权限,并允许他把权限授给其它用户
    Grant select on test.ceshi to jim with grant option;
    以jim连接,执行:
    grant select on test.ceshi to bob;
    05.废除用户权限
    废除权限
    REVOKE
    priv_type [(column_list)]
    [, priv_type [(column_list)]] …
    ON [object_type] priv_level
    FROM user [, user] …

    —废除用户在所有级别上的权限:
    REVOKE ALL PRIVILEGES, GRANT OPTION
    FROM user [, user] …
    示例17:废除aaa对ceshi表的查询权限
    REVOKE ALL PRIVILEGES ON test.ceshi from ‘aaa’@‘localhost’;
    再以aaa执行查询:
    mysql> select * from test.ceshi;
    ERROR 1142 (42000): SELECT command denied to user ‘aaa’@‘localhost’ for table ‘ceshi’
    mysql>
    示例18:废除jim对test.ceshi 表的select权限
    revoke select on test.ceshi from jim;
    因为jim通过with grant option把该权限又授给了bob,因此bob也失去了对test.ceshi 表的select权限
    示例19:要废除jim得到的with grant权限,使用以下语句:
    revoke grant option on test.ceshi from jim;
    常见问题
    1.主机名使用localhost还是127.0.0.1?
    使用localhost,是通过socket来连接;
    使用127.0.0.1,是通过tcp/ip来连接
    2.不要把mysql系统数据库的权限授给用户
    3.不要随便授予super权限
    4. show privileges;
    5.用户具有usage权限意味着“没有权限”,它只表示该用户可以连接到数据库。无法废除该权限

    展开全文
  • Postgre数据库用户权限总结

    千次阅读 2020-06-26 20:32:46
    我们的项目使用了PG数据库,在项目开发阶段,为了省事偷懒,直接将应用连接数据库的用户给了supperuser权限,用起来简直不要太爽。随着开发进度接近中后期,开始筹建用户验收环境,在该环境我依旧直接给了超级用户...

    1、故事起源
    我们的项目使用了PG数据库,在项目开发阶段,为了省事偷懒,直接将应用连接数据库的用户给了supperuser权限,用起来简直不要太爽。随着开发进度接近中后期,开始筹建用户验收环境,在该环境我依旧直接给了超级用户权限,谁曾想就在前几天甲方爸爸哗啦啦的给了一堆漏洞清单,让我们抓紧整改。一头雾水的我不得不重操旧业,开始四处学习PG的用户权限相关知识。

    2、干货记录
    2.1 、创建用户时的权限分配

    CREATE USER/ROLE name [ [ WITH ] option [ ... ] ]  : 关键词 USER,ROLE; name 用户或角色名; 
    where option can be:
          SUPERUSER | NOSUPERUSER      :超级权限,拥有所有权限,默认nosuperuser。
        | CREATEDB | NOCREATEDB        :建库权限,默认nocreatedb。
        | CREATEROLE | NOCREATEROLE    :建角色权限,拥有创建、修改、删除角色,默认nocreaterole。
        | INHERIT | NOINHERIT          :继承权限,可以把除superuser权限继承给其他用户/角色,默认inherit。
        | LOGIN | NOLOGIN              :登录权限,作为连接的用户,默认nologin,除非是create user(默认登录)。
        | REPLICATION | NOREPLICATION  :复制权限,用于物理或则逻辑复制(复制和删除slots),默认是noreplication。
        | BYPASSRLS | NOBYPASSRLS      :安全策略RLS权限,默认nobypassrls。
        | CONNECTION LIMIT connlimit   :限制用户并发数,默认-1,不限制。正常连接会受限制,后台连接和prepared事务不受限制。
        | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL :设置密码,密码仅用于有login属性的用户,不使用密码身份验证,则可以省略此选项。可以选择将空密码显式写为PASSWORD NULL。                                                         加密方法由配置参数password_encryption确定,密码始终以加密方式存储在系统目录中。
        | VALID UNTIL 'timestamp'      :密码有效期时间,不设置则用不失效。
        | IN ROLE role_name [, ...]    :新角色将立即添加为新成员。
        | IN GROUP role_name [, ...]   :同上
        | ROLE role_name [, ...]       :ROLE子句列出一个或多个现有角色,这些角色自动添加为新角色的成员。 (这实际上使新角色成为“组”)。
        | ADMIN role_name [, ...]      :与ROLE类似,但命名角色将添加到新角色WITH ADMIN OPTION,使他们有权将此角色的成员资格授予其他人。
        | USER role_name [, ...]       :同上
        | SYSID uid                    :被忽略,但是为向后兼容性而存在。
    

    示例

    --不需要密码
    postgres=# CREATE ROLE aikes LOGIN;
    CREATE ROLE
    --需要密码
    postgres=# CREATE USER aikes WITH PASSWORD '10JQKA';
    CREATE ROLE
    

    备注
    1、create user命令等同于create role,除了一点:create user有隐含的login权限;而create role不会有该权限。
    2、创建该用户后,还不能直接登录。需要修改 pg_hba.conf 文件,trust不验证密码,MD5验证密码(后文有说明)

    ①:本地登陆:local   all    all    trust
    ②:远程登陆:host   all    all    192.168.100.133/32     md5
    

    补充

    创建复制用户
    CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD '';
    CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD 'abc';
    ALTER USER work WITH ENCRYPTED password '';
    
    创建scheme 角色
    CREATE ROLE abc;
    CREATE DATABASE abc WITH OWNER abc ENCODING UTF8 TEMPLATE template0;
    \c abc
    
    创建schema
    CREATE SCHEMA abc;
    ALTER SCHEMA abc OWNER to abc;
    revoke create on schema sche from sche ;
    
    创建用户
    create user abc with ENCRYPTED password '';
    GRANT abc to abc;
    ALTER ROLE abc WITH abc;
    
    ##创建读写账号
    CREATE ROLE abc_rw;
    CREATE ROLE abc_rr;
    
    ##赋予访问数据库权限,schema权限
    grant connect ON DATABASE abc to abc_rw;
    GRANT USAGE ON SCHEMA abc TO abc_rw;
    
    ##赋予读写权限
    grant select,insert,update,delete ON  ALL TABLES IN SCHEMA abc to abc;
    
    赋予序列权限
    GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA abc to abc;
    
    赋予默认权限
    ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select,insert,update,delete ON TABLES TO abc;
    
    赋予序列权限
    ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT ALL PRIVILEGES ON SEQUENCES TO abc;
    
    
    #用户对db要有连接权限
    grant connect ON DATABASE abc to abc;
    
    #用户要对schema usage 权限,不然要select * from schema_name.table ,不能用搜索路径
    GRANT USAGE ON SCHEMA abc TO abc;
    grant select ON ALL TABLES IN SCHEMA abc to abc;
    ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select ON TABLES TO abc;
    
    create user abc_w with ENCRYPTED password '';
    create user abc_r with ENCRYPTED password '';
    
    GRANT abc_rw to abc_w;
    
    GRANT abc_rr to abc_r;
    

    2.2、用户权限授予和收回

    权限说明

    SELECT:允许从指定表,视图或序列的任何列或列出的特定列进行SELECT。也允许使用COPY TO。在UPDATE或DELETE中引用现有列值也需要此权限。对于序列,此权限还允许使用currval函数。对于大对象,此权限允许读取对象。
    
    INSERT:允许将新行INSERT到指定的表中。如果列出了特定列,则只能在INSERT命令中为这些列分配(因此其他列将接收默认值)。也允许COPY FROM。
    
    UPDATE:允许更新指定表的任何列或列出的特定列,需要SELECT权限。
    
    DELETE:允许删除指定表中的行,需要SELECT权限。
    
    TRUNCATE:允许在指定的表上创建触发器。
    
    REFERENCES:允许创建引用指定表或表的指定列的外键约束。
    
    TRIGGER:允许在指定的表上创建触发器。 
    
    CREATE:对于数据库,允许在数据库中创建新的schema、table、index。
    
    CONNECT:允许用户连接到指定的数据库。在连接启动时检查此权限。
    
    TEMPORARY、TEMP:允许在使用指定数据库时创建临时表。
    
    EXECUTE:允许使用指定的函数或过程以及在函数。
    
    USAGE:对于schema,允许访问指定模式中包含的对象;对于sequence,允许使用currval和nextval函数。对于类型和域,允许在创建表,函数和其他模式对象时使用类型或域。
    
    ALL PRIVILEGES:一次授予所有可用权限。
    

    授予权限

    GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
        [, ...] | ALL [ PRIVILEGES ] }
        ON { [ TABLE ] table_name [, ...]
             | ALL TABLES IN SCHEMA schema_name [, ...] }
        TO role_specification [, ...] [ WITH GRANT OPTION ]
    
    ##单表授权:授权aikes账号可以访问schema为sche 的demo表  
    grant select,insert,update,delete on sche.demo to aikes;
    ##所有表授权:grant select,insert,update,delete on all tables in schema sche to aikes;
    
    GRANT { { USAGE | SELECT | UPDATE }
        [, ...] | ALL [ PRIVILEGES ] }
        ON { SEQUENCE sequence_name [, ...]
             | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
        TO role_specification [, ...] [ WITH GRANT OPTION ]
    
    ##序列(自增键)属性授权,指定sche schema下的seq_id_seq 给aikes用户
    grant select,update on sequence sche.seq_id_seq to aikes;
    ##序列(自增键)属性授权,给用户aikes授权sche schema下的所有序列
    grant select,update on all sequences in schema sche to aikes;
    
    GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
        ON DATABASE database_name [, ...]
        TO role_specification [, ...] [ WITH GRANT OPTION ]
    
    ##连接数据库权限,授权aikes 用户连接数据库dbdemo
    grant connect on database dbdemo to aikes ;
    
    GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
        ON SCHEMA schema_name [, ...]
        TO role_specification [, ...] [ WITH GRANT OPTION ]
    
    ##连接schema权限,授权aikes访问sche schema权限
    grant usage on schema sche to aikes;
    
    GRANT { CREATE | ALL [ PRIVILEGES ] }
        ON TABLESPACE tablespace_name [, ...]
        TO role_specification [, ...] [ WITH GRANT OPTION ]
    
    GRANT { USAGE | ALL [ PRIVILEGES ] }
        ON TYPE type_name [, ...]
        TO role_specification [, ...] [ WITH GRANT OPTION ]
    
    GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]
    ##把aikes用户的权限授予用户mark。grant aikes to mark;
    

    撤销权限

    REVOKE [ GRANT OPTION FOR ]
        { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
        [, ...] | ALL [ PRIVILEGES ] }
        ON { [ TABLE ] table_name [, ...]
             | ALL TABLES IN SCHEMA schema_name [, ...] }
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ] 
    
    ##移除用户aikes在schema sche 上所有表的select权限 
    revoke select on all tables in schema sche from aikes;
    
    ##序列
    REVOKE [ GRANT OPTION FOR ]
        { { USAGE | SELECT | UPDATE }
        [, ...] | ALL [ PRIVILEGES ] }
        ON { SEQUENCE sequence_name [, ...]
             | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
    
    ##库
    REVOKE [ GRANT OPTION FOR ]
        { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
        ON DATABASE database_name [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
    
    REVOKE [ GRANT OPTION FOR ]
        { USAGE | ALL [ PRIVILEGES ] }
        ON FOREIGN DATA WRAPPER fdw_name [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT]
    
    REVOKE [ GRANT OPTION FOR ]
        { USAGE | ALL [ PRIVILEGES ] }
        ON FOREIGN SERVER server_name [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT]
    
    REVOKE [ GRANT OPTION FOR ]
        { EXECUTE | ALL [ PRIVILEGES ] }
        ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
             | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
        
    REVOKE [ GRANT OPTION FOR ]
        { USAGE | ALL [ PRIVILEGES ] }
        ON LANGUAGE lang_name [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
    
    REVOKE [ GRANT OPTION FOR ]
        { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
        ON LARGE OBJECT loid [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
    
    ##schena权限
    REVOKE [ GRANT OPTION FOR ]
        { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
        ON SCHEMA schema_name [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
    
    REVOKE [ GRANT OPTION FOR ]
        { CREATE | ALL [ PRIVILEGES ] }
        ON TABLESPACE tablespace_name [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
    
    REVOKE [ GRANT OPTION FOR ]
        { USAGE | ALL [ PRIVILEGES ] }
        ON TYPE type_name [, ...]
        FROM { [ GROUP ] role_name | PUBLIC } [, ...]
        [ CASCADE | RESTRICT ]
        
    REVOKE [ ADMIN OPTION FOR ]
        role_name [, ...] FROM role_name [, ...]
        [ CASCADE | RESTRICT ]
    

    修改用户属性

    ALTER USER role_specification [ WITH ] option [ ... ]
    
    where option can be:
    
          SUPERUSER | NOSUPERUSER
        | CREATEDB | NOCREATEDB
        | CREATEROLE | NOCREATEROLE
        | INHERIT | NOINHERIT
        | LOGIN | NOLOGIN
        | REPLICATION | NOREPLICATION
        | BYPASSRLS | NOBYPASSRLS
        | CONNECTION LIMIT connlimit
        | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
        | VALID UNTIL 'timestamp'
    
    ALTER USER name RENAME TO new_name
    
    ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
    ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
    ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
    ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL
    
    where role_specification can be:
    
        role_name
      | CURRENT_USER
      | SESSION_USER
    
    ##示例 alter role aikes with superuser;
    
    

    2.3、配置文件中的访问控制
    通过修改pg_hba.conf文件,实现访问控制
    METHOD解释:

    trust:允许无条件连接,允许任何PostgreSQL用户身份登录,而无需密码或任何其他身份验证。
    reject:拒绝任何条件连接,这对于从组中“过滤掉”某些主机非常有用。
    scram-sha-256:执行SCRAM-SHA-256身份验证以验证用户的密码。
    md5:执行SCRAM-SHA-256或MD5身份验证以验证用户的密码。
    password:要提供未加密的密码以进行身份​​验证。由于密码是通过网络以明文形式发送的,因此不应在不受信任的网络上使用。
    gss:使用GSSAPI对用户进行身份验证,这仅适用于TCP / IP连接。
    sspi:使用SSPI对用户进行身份验证,这仅适用于Windows。
    ident:通过联系客户端上的ident服务器获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。 Ident身份验证只能用于TCP / IP连接。为本地连接指定时,将使用对等身份验证。
    peer:从操作系统获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。这仅适用于本地连接。
    ldap:使用LDAP服务器进行身份验证。
    radius:使用RADIUS服务器进行身份验证。
    cert:使用SSL客户端证书进行身份验证。
    pam:使用操作系统提供的可插入身份验证模块(PAM)服务进行身份验证。
    bsd:使用操作系统提供的BSD身份验证服务进行身份验证。
    
    # TYPE  DATABASE    USER   ADDRESS   METHOD
    local          all               all                         trust
    --在本地允许任何用户无密码登录
    local          all                all                        peer
    --操作系统的登录用户和pg的用户是否一致,一致则可以登录
    local          all                all                        ident
    --操作系统的登录用户和pg的用户是否一致,一致则可以登录
    host          all                all    192.168.163.0/24   md5
    --指定客户端IP访问通过md5身份验证进行登录
    host          all                all     192.168.163.132/32   password
    --指定客户端IP通过passwotd身份验证进行登录
    
    host    all             all     192.168.54.1/32         reject
    host    all             all     192.168.0.0/16           ident  
    host    all             all     127.0.0.1       255.255.255.255     trust
    ...
    

    设置成功后需要重新加载配置文件,不需要重启数据库

    postgres=# select pg_reload_conf();
     pg_reload_conf 
    ----------------
     true
    

    通过SQL可以查看配置:

    postgres=# select * from pg_hba_file_rules;
     line_number | type  |   database    | user_name |    address    |                 netmask                 | auth_method | options | error 
    -------------+-------+---------------+-----------+---------------+-----------------------------------------+-------------+---------+-------
              87 | host  | {all}         | {all}     | 192.168.163.0 | 255.255.255.0                           | md5         |         | 
              92 | local | {all}         | {all}     |               |                                         | peer        |         | 
              94 | host  | {all}         | {all}     | 127.0.0.1     | 255.255.255.255                         | md5         |         | 
              96 | host  | {all}         | {all}     | ::1           | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | md5         |         | 
              99 | local | {replication} | {all}     |               |                                         | peer        |         | 
             100 | host  | {replication} | {all}     | 127.0.0.1     | 255.255.255.255                         | md5         |         | 
             101 | host  | {replication} | {all}     | ::1           | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | md5         |         |
    

    3、实际使用授权示例

    #访问库
    postgres=# grant connect on database db to aikes;
    GRANT
    #访问schmea
    postgres=# grant usage on schema sche to aikes;
    GRANT
    #访问表
    postgres=# grant select,insert,update,delete on all tables in schema sche to aikes;
    GRANT
    #如果访问自增序列,需要授权
    postgres=# grant select,update on all sequences in schema sche to aikes;
    GRANT
    
    注意:上面的授权只对历史的一些对象授权,后期增加的对象是没有权限的,需要给个默认权限
    
    #默认表权限
    postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA sche GRANT select,insert,update,delete ON TABLES TO aikes;
    ALTER DEFAULT PRIVILEGES
    
    #默认自增序列权限
    postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA sche GRANT select,update ON sequences TO aikes;
    ALTER DEFAULT PRIVILEGES
    

    4、查看对象权限

    通过指令 \dp 或者下列SQL可以查看到数据库对象权限划分

    SELECT n.nspname as "Schema",  
      c.relname as "Name",  
      CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'foreign table' END as "Type",  
      pg_catalog.array_to_string(c.relacl, E'\n') AS "Access privileges",  
      pg_catalog.array_to_string(ARRAY(  
        SELECT attname || E':\n  ' || pg_catalog.array_to_string(attacl, E'\n  ')  
        FROM pg_catalog.pg_attribute a  
        WHERE attrelid = c.oid AND NOT attisdropped AND attacl IS NOT NULL  
      ), E'\n') AS "Column privileges",  
      pg_catalog.array_to_string(ARRAY(  
        SELECT polname  
        || CASE WHEN polcmd != '*' THEN  
               E' (' || polcmd || E'):'  
           ELSE E':'   
           END  
        || CASE WHEN polqual IS NOT NULL THEN  
               E'\n  (u): ' || pg_catalog.pg_get_expr(polqual, polrelid)  
           ELSE E''  
           END  
        || CASE WHEN polwithcheck IS NOT NULL THEN  
               E'\n  (c): ' || pg_catalog.pg_get_expr(polwithcheck, polrelid)  
           ELSE E''  
           END    || CASE WHEN polroles <> '{0}' THEN  
               E'\n  to: ' || pg_catalog.array_to_string(  
                   ARRAY(  
                       SELECT rolname  
                       FROM pg_catalog.pg_roles  
                       WHERE oid = ANY (polroles)  
                       ORDER BY 1  
                   ), E', ')  
           ELSE E''  
           END  
        FROM pg_catalog.pg_policy pol  
        WHERE polrelid = c.oid), E'\n')  
        AS "Policies"  
    FROM pg_catalog.pg_class c  
         LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace  
    WHERE c.relkind IN ('r', 'v', 'm', 'S', 'f')  
      AND n.nspname !~ '^pg_' AND pg_catalog.pg_table_is_visible(c.oid)  
    ORDER BY 1, 2;  
    
     Schema |              Name              |   Type   |    Access privileges    | Column privileges | Policies
    --------+--------------------------------+----------+-------------------------+-------------------+----------
     public | emp    				         | table    | dbuser=arwdDxt/dbuser  +|                   |
            |                                |          | postgres=arwd/dbuser    |                   |
     public | dept         					 | table    | dbuser=arwdDxt/dbuser  +|                   |
            |                                |          | postgres=arwd/dbuser    |                   |
     public | company                   	 | table    | dbuser=arwdDxt/dbuser  +|                   |
    
    

    其中dbuser=后面跟着的字符就是ACL权限列表定义的对应权限
    权限定义

    展开全文
  • Clickhouse用户权限

    千次阅读 2020-07-20 18:19:36
    二、 用户权限赋予 2.1 xml方式对用户赋予权限 2.2 sql驱动方式赋予权限 三、用户限额 3.1 xml方式用户限额 3.2 sql驱动方式限额 创建用户 xml方式创建用户 创建用户的具体xml内容如下: <!-- If user...

    目录

    一、 创建用户 

    1.1 xml方式创建用户 

    1.2 Sql驱动方式创建用户 

    二、 用户权限赋予 

    2.1 xml方式对用户赋予权限 

    2.2 sql驱动方式赋予权限 

    三、用户限额 

    3.1 xml方式用户限额 

    3.2 sql驱动方式限额 

    、创建用户

    1.1 xml方式创建用户

    创建用户的具体xml内容如下:

    <!-- If user name was not specified, 'default' user is used. -->

        <user_name>

            <password></password>

            <!-- Or -->

            <password_sha256_hex></password_sha256_hex>

     

            <access_management>0|1</access_management>

     

            <networks incl="networks" replace="replace">

            </networks>

     

            <profile>profile_name</profile>

     

            <quota>default</quota>

     

            <databases>

                <database_name>

                    <table_name>

                        <filter>expression</filter>

                    <table_name>

                </database_name>

            </databases>

        </user_name>

        <!-- Other users settings -->

    整个内容放在user.xml的<users></users>标签下。

    Password设置:

    Password下存放明文密码,password_sha256_hex标签下存放sha256加密后的密码,password_double_sha1_hex标签下可以存放double sha1加密后的密码。这里建议使用加密过后的密码。

    可以在命令行中创建加密密码。

    Sha256加密执行以下命令:

    PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

    Double sha1加密执行以下命令

    PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'

     

    Network网络限制:

    <network>,允许被登陆clickhouse服务器的客户端列表,支持通过ip、host、host_regexp方式设置

    使用ip进行设置:

    <ip>1.1.1.1</ip>

    <ip>10.0.0.1/8</ip><!-设置具体的ip地址来限制登录用户-->

     

    <!--为所有客户端打开权限-->

    <ip>::/0</ip>

     

    <!--仅允许本地登陆-->

    <ip>::1</ip>

    <ip>127.0.0.1</ip>

    使用host来进行设置:

    <host>example1.host.com</host>

    使用host_regexp进行设置:

    <host_regexp>^example\d\d-\d\d-\d\.host\.ru$</host_regexp>

     

    Profile设置:

    在<profile></profile>标签下,写入之前已经设置好的profile权限名,表示该用户拥有该权限。具体的权限设置见2.1中profiles标签的设置。

     

    Quota设置:

    在<quota></quota>标签下,填入已经预先配置好的quota名称,具体的quota设置见3.1中的quota配置。

    Database设置:

    这里是设置用户可以访问的数据库,以及数据库下表的访问权限。

    <databases>

            <database_name>

                <table1>

                    <filter>id = 1000</filter>

                </table1>

            </database_name>

        </databases>

    <databases>或者可以使用<allow_databases>下定义该用户可以访问的数据库,这里可以包含一个或者多个数据库,同理在数据库标签下可以设置表名,表示可以访问的对应数据库下的表。不填写默认全都能访问。<filter></filter>中填写表达式,id= 1000,表示只能访问id为1000的数据项,id<10,表示只能访问id小于10的数据项。其他的表达式同理。

     

    1.2 sql方式创建用户

    配置修改:

    1、在config.xml中添加access_control_path 配置项,具体如下:<access_control_path>/var/lib/clickhouse/access/</access_control_path>

    通过 SQL 形式创建的用户、角色等信息将以文件的形式被保存在这个目录。

    2、在user.xml中为默认用户default添加access_management配置项

                <access_management>1</access_management>

    0代表disabled,1代表enabled。默认为0。

    创建用户:

    官方文档介绍如下: CREATE USER [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]

        [IDENTIFIED [WITH {NO_PASSWORD|PLAINTEXT_PASSWORD|SHA256_PASSWORD|SHA256_HASH|DOUBLE_SHA1_PASSWORD|DOUBLE_SHA1_HASH}] BY {'password'|'hash'}]

        [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]

        [DEFAULT ROLE role [,...]]

        [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

    这里举例创建一个user_01用户:

     CREATE USER user_01 IDENTIFIED WITH PLAINTEXT_PASSWORD BY '123'

     

    官方修改用户信息命令如下:

    ALTER USER [IF EXISTS] name [ON CLUSTER cluster_name]

        [RENAME TO new_name]

        [IDENTIFIED [WITH {PLAINTEXT_PASSWORD|SHA256_PASSWORD|DOUBLE_SHA1_PASSWORD}] BY {'password'|'hash'}]

        [[ADD|DROP] HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]

        [DEFAULT ROLE role [,...] | ALL | ALL EXCEPT role [,...] ]

        [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

     

    这里举例修改用户的密码:

    ALTER USER user_01 IDENTIFIED WITH PLAINTEXT_PASSWORD BY '111111'

    将密码修改为111111.

     

     

     

     

     

     

     

    二、用户权限赋予

    2.1 xml方式对用户赋予权限

    在user.xml中定义各种权限

       <profiles>    

           <!--可自定义名称,default是默认存在的角色名称-->

    <!--可以设置多种权限,每个用户只需要在其对用的xml中<profile>标签填入其权限名称即可-->

            <default>

            <max_memory_usage>10000000000</max_memory_usage><!-限制内存使用-->

                <load_balancing>random</load_balancing>

                <constraints><!-- 配置约束-->

                    <max_memory_usage>

                        <min>5000000000</min>

                        <max>20000000000</max>

                    </max_memory_usage>

                    <load_balancing>

                        <readonly/>

                    </load_balancing>

                </constraints>

    </default>

        </profiles>

    profile中有约束条件,从而限制其中的参数值被任意修改,约束条件有三种规则:

    Min:最小值约束,对应参数取值不能小于该值.

    Max:最大值约束,对应参数取值不能大雨该值.

    Readonly:只读约束,对应参数禁止修改.

     

    参数介绍:

     readonly :读权限、写权限和设置权限,由此标签控制,它有三种取值:

    0,不进行任何限制(默认值,可读可写);

    1,只拥有读权限(只能执行SELECT、EXISTS、SHOW和DESCRIBE);

    2,拥有读权限和设置权限(在读权限基础上,增加了SET查询)。

    当设置readonly=1后,用户将无法在当前会话中更改readonly和allow_ddl设置;也可以通过约束来限制更改权限。

    allow_ddl:DDL权限由此标签控制,它有两种取值:

    当取值为0时,不允许DDL查询;

    当取值为1时,允许DDL查询(默认值)

    如果当前会话的allow_ddl = 0,则无法执行SET allow_ddl = 1

    对用户增删改查限制:(select,insert,delete,update)

    <normal> --只读,不能DDL

            <readonly>1</readonly>

            <allow_ddl>0</allow_ddl>

     </normal>

     

    <normal_1> --读且能set,不能DDL

    <readonly>2</readonly>

    <allow_ddl>0</allow_ddl>

    </normal_1>

     

    <normal_2> --只读,即使DDL允许

    <readonly>1</readonly>

    <allow_ddl>1</allow_ddl>

    </normal_2>

     

    <normal_3> --读写,能DDL

    <readonly>0</readonly>

    <allow_ddl>1</allow_ddl>

    </normal_3>

    通过修改用户的<profile></profile>标签的名称来改变该用户的权限,其中的profile_name一定要在profiles下有定义才能够实现

    2.2 sql驱动方式赋予权限

    官方标准的sql语句格式:GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION]

     

    直接对user赋予权限:

    grant select on db_test.* to user_01 ;

    赋予用户对db_test数据库下的所有表的select查询功能。

    Grant insert on db_test.* to user_01;

    Grant delete on db_test.* to user_01;

    Grant update on db_test.* to user_01;

    以上是赋予user_01用户对数据库db_test下所有表的增删改查功能。

    revoke delete on db_test.* from user_01 ;

    撤销用户对数据库db_test下所有表的delete查询功能。其他权限的撤销操作同上。

     

    通过对角色赋予权限再赋予用户角色:

    CREATE ROLE [IF NOT EXISTS | OR REPLACE] name

        [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]

    Creat role manager;//创建角色

    GRANT SELECT ON *.* TO manager;

    GRANT insert ON *.* TO manager;//对角色授权

    GRANT manager to user_01;//对用户赋予角色信息

    Create USER test_01 default role manage;//创建角色赋予默认的角色

    三、用户限额

    3.1 xml方式用户限额

    基本的xml方式限额

    <quotas>

            <default> <!--自定义名称-->

                <interval>

                    <duration>3600</duration>

                    <queries>0</queries>

                    <errors>0</errors>

                    <result_rows>0</result_rows>

                    <read_rows>0</read_rows>

                    <execution_time>0</execution_time>

                </interval>

            </default>

    </quotas>

    每个参数代表的含义:

    1.Duration

    累计时间周期,单位秒,到达周期时间清除所有收集值,然后重新计算。

    2.Queries

    在周期内允许查询次数限制

    3.Errors

    在周期内允许引发异常的次数限制

    4.Result_rows

    在周期内允许的查询返回结果行数

    5.Read_rows

    在周期内,允许远程节点读取的数据行数

    6.Execution_time

    允许查询的总执行时间,单位为秒

    3.2 sql驱动方式限额

    官方给出的限额创建命令:

    CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]

        [KEYED BY {'none' | 'user name' | 'ip address' | 'client key' | 'client key or user name' | 'client key or ip address'}]

        [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY}

            {MAX { {QUERIES | ERRORS | RESULT ROWS | RESULT BYTES | READ ROWS | READ BYTES | EXECUTION TIME} = number } [,...] |

             NO LIMITS | TRACKING ONLY} [,...]]

        [TO {role [,...] | ALL | ALL EXCEPT role [,...]}]

    创建一个配额举例:(限制最大的查询次数)

    CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO user_01

    这里可以根据xml中配额的各项参数,通过修改自己所需要的参数名称和数值来定义配额。

     

    删除一个配额信息

    DROP QUOTA [IF EXISTS] name [,...] [ON CLUSTER cluster_name]

    查询配额信息

    SHOW CREATE QUOTA [name | CURRENT]

    以上的介绍都是一些简单的基本操作,如果需要更加详细的介绍文档,参见官文api   https://clickhouse.tech/docs/en/

     

     

     

     

    展开全文
  • MySQL用户权限管理

    千次阅读 2019-06-20 22:20:36
    MySQL用户权限管理 知识要点 了解mysql的默认用户 权限的分类 用户的创建 给用户授权 废除用户权限 MySQL的认证方式 用户名 密码 登录地址 root@localhost(登录主机的地址—客户端) 密码 客户端:要通过什么...
  • 数据库实验四 用户权限管理

    千次阅读 2019-05-22 16:08:13
    广州大学学生实验报告 ... 计算机科学与网络工程学院 年级、专业、班 计科172 姓名 学号 实验课程名称 ...
  • 手把手教你利用爬虫爬网页(Python代码)

    万次阅读 多人点赞 2019-05-14 14:34:48
    本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以...
  • 实训二 Linux下用户和组的管理、权限及相关命令

    千次阅读 多人点赞 2019-03-26 18:51:58
    实训二 Linux下用户和组的管理、权限及相关命令一. 实验目的:二. 实验内容:三. 实验步骤:cat /etc/groupcat /etc/groupgroupadd -g 2000 prjgroupadd -g 2001 prj_agroupadd -g 2002 prj_b 一. 实验目的: ...
  • WIN10的用户管理与权限设置

    万次阅读 2018-04-13 19:14:40
    一、 用户帐户管理1、 用户帐户不同的用户身份拥有不同的权限每个用户包含一个...因为SID安全标识符不同)二、 内置用户帐户用于特殊用途,一般不需更改其权限1) Administrator(管理员用户)默认的管理员用...
  • 指定个别用户可以切换到root 切换用户:su - 目标用户 密码验证: root --> 其他用户,不需要密码验证 普通用户 -->其他用户,需要目标用户密码 su的优缺点: su 命令的确为管理带来方便,但通过su切换到...
  • MySQL用户权限系统

    千次阅读 2016-09-15 22:42:34
    MySQL权限系统主要功能是验证从给定地址(host)登录的用户user),同时将用户与数据库的权限如SELECT、INSERT、UPDATE和DELETE等关联起来。其他功能包括访客功能,授权MySQL 特定功能如LOAD_DATA_INFILE和管理...
  • 上一篇《springcloud集成Oauth2权限项目-oauth服务使用jwt获取access_token(password模式)(七)》获取用户是在oauth服务写死用户名和密码,现在要改造,oauth调用user服务去获取用户信息。 改造...... 首先在...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    文件为doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错...last命令的作用是显示近期用户或终端的登录情况,它的使用权限是所有用户。通过last命令查看该程序的log,管理员...
  • nfs关于用户权限的配置

    千次阅读 2020-07-26 16:46:40
    nfs是很常用的网络共享盘方式,访问客户端数量多了之后,为确保安全,会做权限控制,一般都是放开读权限,而控制写权限。 本文将在几种场景下说明 nfs 关于用户权限的配置。 2 配置 2.1 nfs一些细节原理 nfs ...
  • 用户与组管理、NTFS权限用户与组管理用户SID本地用户默认有内置账户:查看用户管理:计算机右键管理Windows用户与组管理的操作练习NTFS权限用户组与NTFS权限实验实验一:实验二:实验三 用户与组管理 用户 账户=...
  • Win10共享文件夹,创建(启用)用户并分享文件、修改特定用户访问权限 目录 Win10共享文件夹,创建(启用)用户并分享文件、修改特定用户访问权限 一、利用guest登录 二、自定义账户 三、登录共享用户,查看...
  • Oracle用户权限,角色以及登录管理   1. sys和system用户的区别 system用户只能用normal身份登陆em。除非你对它授予了sysdba的系统权限或者syspoer系统权限。 sys用户具有“SYSDBA”或者“SYSOPER”权限,...
  • PG数据库用户权限管理

    千次阅读 2021-01-04 10:40:45
    创建用户/角色 CREATE USER/ROLE name [ [ WITH ] option ... SUPERUSER | NOSUPERUSER :超级权限,拥有所有权限,默认nosuperuser。 | CREATEDB | NOCREATEDB :建库权限,默认nocreatedb。 | CREATEROLE | NOCREA
  • ubuntu使用教程

    万次阅读 多人点赞 2020-01-15 17:53:05
    ubuntu使用教程 一、 Ubuntu简介 Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词,意思...Ubuntu目前具有庞大的社区力量支持,用户可...
  • Linux总结

    千次阅读 多人点赞 2020-01-14 20:36:45
    /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示; /usr : 用于存放系统应用程序(使用yum命令下载的软件包会在这里); /opt: 额外安装的可选应用...
  • Jenkins基础入门-5-用户权限管理

    千次阅读 2017-09-16 22:13:49
    本篇,我们来介绍下Jenkins上如何创建用户,以及如何管理用户,和那些用户可以有ProjectA的权限。这个很好理解,一个项目,有开发和测试,和运维,每个团队都有不同的角色,例如有测试经理和测试工程师,他们两个的...
  • 系统权限只能由 DBA用户授权,对象权限由拥有该对象的用户授权,授权语法是: 语法结构:授权 GRANT角色|权限 TO 用户(角色) SQL> GRANT CONNECT TO taotao; 授权成功。 SQL> GRANT RESOURCE TO ...
  • mongod数据库服务默认是不开启用户认证的,此时任何的client端都可以连接并访问mongo服务,只有是网络可以连通即可。 如果需要支持用户认证的功能,则必须要先主动开启该功能,主要的方式就是在启动命令的时候添加一...
  • Linux 命令面试题

    万次阅读 多人点赞 2019-07-24 09:40:04
    Linux面试题: 1.Linux常用系统安全命令 ...chmod // 用来变更文件或目录的权限 setfacl // 设置文件访问控制列表 2.Linux常用进程管理命令 w // 用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。 top ...
  • 最近用ldap协议读取其管理的ad数据,一直对userAccountControl的详细含义不是很清楚,userAccountControl记录了用户的AD账号的很多属性信息,该属性标志是累积性的。若要禁用用户的帐户,请将 UserAccountControl ...
  • Mysql的用户授权和撤销权限

    千次阅读 2018-07-18 17:14:31
    用户授权与权限撤销 三用户授权: 在数据库服务器上添加新的连接用户名,默认只有数据库管理员 root 用户在数据服务器本机登陆有授权权限,默认情况下管理员只能从数据库本机连接服务,在没有其他用户能够连接...
  • rabbitmq 添加用户以及权限

    千次阅读 2018-11-08 13:42:31
    原因:默认情况下访问rabbitmq的用户名和密码都是guest,这个账户是有限制的,默认只能通过本地网络也就是localhost访问,远程访问受限制,所以要实现生产和消费...2) 为root用户设置权限所有权限 rabbitmqctl set_...
  • MySQL 查看用户授予的权限

    千次阅读 2018-04-14 13:18:46
    在MySQL中,如何查看一个用户被授予了那些权限呢? 授予用户权限可能分...这些权限存储在mysql.user表中。GRANT ALL ON .和REVOKE ALL ON .只授予和撤销全局权限。 2.数据库层级 数据库权限适用于一个给定数据库...
  • vsftpd的安装配置及用户权限分配

    千次阅读 2018-04-13 16:57:46
    FTP服务器用户权限配置(本人的一点小总结)1、yum–y install ftp vsftpd //安装ftp和vsftpd2、vi/etc/vsftpd/ftpuser.txt //创建密码明文文件ftp1123456ftp2123456 //奇数行为用户账户,偶数行为密码3、db_load–...
  • 04 用户权限管理 实验报告

    千次阅读 2018-07-30 01:05:37
    04 用户权限管理 实验报告  广州大学学生实验报告  开课学院及实验室:计算机科学与工程实验室418B室 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 221,737
精华内容 88,694
关键字:

user用户网络权限