
mysql -u root -p
password
use mysql
insert into user(host,user,password) values('localhost','hail',password('hail'))
flush privileges
create database haildb
grant all privileges on haildb.* to hail@localhost identified by 'hail'
flush privileges
如果想指定部分权限给用户
grant select,update on haildb.* to hail@localhost identified by 'hail'
flush privileges
删除用户
delete from user where user='hail' and host='localhost'
flush privileges
删除用户数据库
drop database haildb
修改指定用户密码
update user set password=password('new_password') where user='hail' and host='localhost'
flush privileges
sybase数据库的用户,包含两个层面:一个是登陆号,另一个是具体DB的用户,我们登陆时,使用的是登录号,但是这个登录号可以 *** 作哪些DB及 *** 作权限则取决于数据库用户。一般情况下,我们可以采取相同的名字来表示登录号和数据库用户。首先创建一个登陆号:
sp_addlogin loginame, passwd
loginame 登录名
passwd 密码
全部语法(一般不用到)为:
sp_addlogin loginame, passwd [, defdb]
[, deflanguage ] [, fullname ] [, passwdexp ]
[, minpwdlen ] [, maxfailedlogins ]
然后创建用户:
sp_adduser loginame
这样创建当前数据库的用户,且用户名和登陆名是一样的。
全部语法为:
[dbname..]sp_adduser loginame [, username[, grpname]]
最后分配权限:
grant all | select,insert,delete,update
on table_name | view_name | stored_procedure_name
to username
或
grant all | create database,create
default,create procedure,create rule,create table,create view,set proxy,set session authorization
to username
例,假如当前DB为:DB001:
sp_addlogin 'test001','password001'
go
sp_adduser 'test001', 'user001'
go
grant create table to user001
go
创建了一个test001的登录名,之后为之创建一个当前数据库的用户,使这个登录名可以 *** 作当前数据库。之后分配了创建表的权限给user001。
这个时候你就可以使用用户名'test001'和密码'password001'登陆了,并且可以在DB001中创建表了。同时由于sp_adduser 的时候没有指定grpname参数,那么默认是public用户组,这个组里的用户默认即开通了select/delete/update/insert的权限。
如果你希望去掉一些权限,请使用revoke命令,其语法了grant完全相同,你只需要将grant换成revoke即可,例:
revoke select on address to user001
禁止user001查看address表。
在建立一个低权限数据库用户的时候,往往只希望他可以拥有对特定数据库的访问权限,对于特定数据库之外的信息,是知道的越少越好。首先,假设有一个低权限用户A、使用MSSQL自带的事件查探器进行分析可以知道,企业管理器使用如下语句获取数据库列表:select name, DATABASEPROPERTY(name, N'IsDetached'), (case when DATABASEPROPERTY(name, N'IsShutdown') is null then -1 else DATABASEPROPERTY(name, N'IsShutdown') end), DATABASEPROPERTY(name, N'IsSuspect'), DATABASEPROPERTY(name, N'IsOffline'), DATABASEPROPERTY(name, N'IsInLoad'), (case when DATABASEPROPERTY(name, N'IsInRecovery') is null then -1 else DATABASEPROPERTY(name, N'IsInRecovery') end), (case when DATABASEPROPERTY(name, N'IsNotRecovered') is null then -1 else DATABASEPROPERTY(name, N'IsNotRecovered') end), DATABASEPROPERTY(name, N'IsEmergencyMode'), DATABASEPROPERTY(name, N'IsInStandBy'), has_dbaccess(name), status, category, status2 from master.dbo.sysdatabases而查询分析器则使用如下语句获取数据库列表(执行一个存储过程)dbo.sp_MShasdbaccess这就是原因之所在了在默认情况下,数据库用户对系统数据库是拥有权限的,可以从系统数据库查询信息,所以,企业管理器通过查询master数据库来获取数据库列表的方式并不受用户所能访问的数据库的限制。而查询分析器执行的存储过程是经过权限限定后的数据库列表。那如果要禁止用户查看他没有权限访问的数据库名称,只有,,,,禁止他查询master.dbo.sysdatabases了把用户加入到master数据库的用户中去然后指派sysdatabases表的访问权限把A用户的select权限去掉只能使用查询分析器进行 *** 作了虽然有些严厉,但也是一种解决方法欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)