首先执行:
exec sp_addrole 'UserName' --创建用户角色,其中UserName替换成要创建的用户
然后:
exec sp_addrolemember 'db_datareader','UserName' --给这个用户读数据库的权限
如果单表等赋予其他用户权限的话,可用如下语句:
grant select on 表名 to UserName
1、首先下SQL语句查询出数据库中所有用户及改用户授予的IP权限。
2、其次查看该用户的所有权限并生成创建用户及用户权限的SC。
3、最后查询结果中的SQL语句,创建用户和创建用户权限,进行拷贝即可。
SQL 用户权限设置
首先,做好用户安全:
--简单的,只允许sql的用户访问sql(防止利用administrator组用户访问)
1企业管理器--右键SQL实例--属性--安全性--身份验证--选择"sql server和windows"--确定
2企业管理器--安全性--登陆--右键sa--设置密码--其他用户也设置密码
3删除用户:
BUILTIN\Administrators
<机器名>\Administrator --这个用户不一定有
这样可以防止用windows身份登陆SQL
4设置进入企业管理器需要输入密码
在企业管理器中
--右键你的服务器实例(就是那个有绿色图标的)
--编辑SQL Server注册属性
--选择"使用 SQL Server 身份验证"
--并勾选"总是提示输入登录名和密码"
--确定
--经过上面的设置,SQL Server基本上算是安全了
其次,改默认端口,隐藏服务器,减少被攻击的可能性
SQL Server服务器
--开始
--程序
--Microsoft SQL Server
--服务器网络实用工具
--启用的协议中"TCP/IP"
--属性
--默认端口,输入一个自已定义的端口,比如2433
--勾选隐藏服务器
--管好sql的用户,防止访问他不该访问的数据库(总控制,明细还可以控制他对于某个数据库的具体对象具有的权限)
--切换到新增的用户要控制的数据库
use 库名
go
--新增用户
exec sp_addlogin 'test' --添加登录
exec sp_grantdbaccess N'test' --使其成为当前数据库的合法用户
exec sp_addrolemember N'db_owner', N'test' --授予对自己数据库的所有权限
--这样创建的用户就只能访问自己的数据库,及数据库中包含了guest用户的公共表
go
--删除测试用户
exec sp_revokedbaccess N'test' --移除对数据库的访问权限
exec sp_droplogin N'test' --删除登录
最后一步,为具体的用户设置具体的访问权限,这个可以参考下面的最简示例:
--添加
--添加用户:
exec sp_addlogin '用户名','密码','默认数据库名'
--添加到数据库
exec sp_grantdbaccess '用户名','数据库名'
--分本权限
grant insert,select,update,delete on table1 to public
在SQL Server数据库中 主要是通过角色来继承相关的权限 但是 这个权限继承很容易造成权限上的冲突 如现在有个销售员账户SALE 有一个销售部门角色DE_SALES 其中销售部门角色DE_SALES具有查询所有客户信息 即CUSTOM表的权限 但是销售员账户SALE 其由于是为试用期的员工设置的临时帐户 所以其不能够查询CUSTOM表 但是 SALE 帐户其是属于销售部门这个角色 其会继承销售部门这个角色的所有访问权限 此时 SALE 帐户所属角色的权限跟自己帐户的权限就产生了冲突 遇到这种情况 SQL Server数据库该如何处理呢
在SQLServer数据库中 授予组或者角色的权限由该组或者角色的成员所继承 虽然某个用户可能在一个级别上授予或者废除权限 但如果这些权限与更高级的权限发生冲突的话 则可能会打破数据库管理员的权限设计思路 让某个用户意外的禁止或者允许访问某个数据库对象 为了避免因为数据库权限冲突所导致的一系列问题 SQLServer数据库提出了一些解决措施 虽然通过这些措施不能够完全避免权限之间的冲突 但是 至少让数据库管理员看到了解决问题的希望
招数一 明确拒绝
应用场景 现在数据库中有用户Landy 其属于销售员SALES角色 其中 销售员角色具有查询客户信息表Customs的权限 而由于某种原因 数据库管理员限制用户Landy访问数据库对象Customs表的权利 此时就会有对象访问权限上的冲突 此时 数据库管理员该如何才能够避免这种冲突呢
第一个招数就是学会使用拒绝 *** 作 在数据库中 拒绝权限始终优先 在任何级别(无论是用户或者角色)上的拒绝权限都拒绝该对象上的权限 无论该用户现有的权限是否已授予权限还是被废除权限 这听起来比较绕口 或许根据上面的例子来讲 大家更容易明白 如上例 若要解决上面的权限冲突问题 则我们只需要在用户Landy的权限设置中 拒绝其具有数据库对象表Customs表的Select权限 由于显示的拒绝其总被优先执行 所以即使其所属的角色具有表Customs的访问权限 但是其成员Landy由于被显示的拒绝 根据拒绝优先的选择 则其最终不会有数据库表Customs的访问权限
所以笔者所传授给大家的第一个招数就是要学会使用拒绝 *** 作 各位数据库管理员要牢记 在权限管理中 拒绝 *** 作总是被优先执行 另外还有一个极端的例子 可以说明这个问题 如果数据库管理员把Public进行设置 设置为拒绝权限 此时由于拒绝权限被优先执行 则数据会禁止任何用户访问能数据库对象 故拒绝权限一般往往用在用户级别上 可以实现对个别特殊用户的权限控制 而不用给他们设置独立的组 这让数据库权限管理更加的灵活
招数二 废除权限 可以让某些帐户恢复正常
应用情景 现在数据库中有用户Landy 其属于销售员SALES角色 其中 销售员角色具有查询客户信息表Customs的权限 而由于某种原因 数据库管理员限制用户Landy访问数据库对象Customs表的权利 此时 数据库管理员给Landy用户显示的拒绝访问Customs表的权利 但是 现在这个限制其访问客户表的原因已经消除 用户Landy 可以正常访问表Customs了 此时 该如何处理呢
此时 数据库管理员可以通过废除权限 *** 作来完成需求 废除权限只删除所废除级别(如用户 角色或者组)上的已授予权限或者已拒绝权限 而在另外级别上所授予或者拒绝的同一权限仍然适用 废除权限类似于拒绝权限 因为二者都是在同一级别上删除已经授予的权限 但是 废除权限是删除已经授予的权限 并不妨碍用户 组或者角色从更高级别继承已授予的权限 为此 如果废除用户查看表的权限 并不一定能够防止用户查看该表 这跟拒绝权限 *** 作就有本质的区别
举例来说 在上面这个例子中 Landy用户刚开始其被显示的拒绝访问表Customs 虽然其所属的角色具有访问表Customs的权限 但是因为拒绝优先 所以用户Landy最终不能过访问这个表 此时 若限制原因消除 则数据库管理员可以采取废除权限 *** 作 把Landy用户上的拒绝权限废除掉 因为废除权限只删除用户Landy上已拒绝访问这个表的权限 而不影响从角色SALES中继承统一权限 为此 用户Landy最终具有访问这个表Customs的权限 这就是废除权限 *** 作的本质
在实际工作中 废除权限 *** 作与拒绝权限 *** 作往往被用来处理一些特殊的帐户 如不少企业中 试用期员工其权限往往会受到限制 出于安全起见 企业不会让一些还在试用期的员工访问所有的数据 为此 就要对他们的权限进行限制 此时 就可以在这些用户帐户级别上显示的拒绝 实现部分访问限制的需求 当他们试用期过后 若试用合格的话 就可以把这些帐户的拒绝权限废除掉 如此的话 他们就可以正常继承他们所属角色或者组的权限 可见 拒绝权限与废除权限结合 可以让数据库全县的管理更加的统一 最终要的是 可以最大程度的避免因为权限冲突而导致的数据管理上的安全漏洞
另外 在实际配置中 需要注意一个问题 虽然废除权限具有废除拒绝权限的能力 但是 他只能够在一个级别上其作用 如上面这个例子中 另外还有一个T_SALES的角色 其权限设置中 显示的拒绝访问表Customs 此时 若用户Landy同时属于SALES角色和T_SALES角色 虽然通过废除权限废除了用户Landy级别上的拒绝访问表Customs的权限 但是 用户Landy所属的T_SALES角色中的拒绝权限仍然具有优先执行的权力 所以 最终这个用户仍然不能够访问表Customs 所以 通过废除对权限的拒绝可以删除已经拒绝的权限 但是 如果用户在其他组或者角色级别有其他拒绝权限的话 在该用户访问某个对象的权限仍然会被拒绝
招数三 授权 *** 作 让用户访问权限一目了然
应用情景 现在数据库中有用户Landy 其属于销售员SALES角色 其中 销售员角色具有查询客户信息表Customs的权限 而由于某种原因 数据库管理员限制用户Landy访问数据库对象Customs表的权利 此时 数据库管理员给Landy用户显示的拒绝访问Customs表的权利 但是 现在这个限制其访问客户表的原因已经消除 用户Landy 可以正常访问表Customs了 此时 该如何处理呢
此时 除了可以通过上面的废除权限 *** 作来处理 还可以通过授权 *** 作来完成 废除权限 *** 作有一个缺陷 就是数据库管理员要判断这个用户到底是否具有某个数据库对象的访问权限时 还需要去查看其所属的角色或者组中的权限设置 这会增加一定的工作量 而授权 *** 作则可以避免这种情况 授予权限删除所授予级别伤的已经拒绝权限或者已经废除权限 而在另一级别上所拒绝权限的同一权限仍然适用 但是 虽然在另一级别上所废除的同一权限仍然适用 但他不阻止用户访问该对象 也就是说 如果Sales角色可以访问表Customs 现在数据库管理员授予了用户Landy访问Customs表的权限 则用户最终具有访问表Customs的权限 但是 如果Sales角色显示的拒绝了表Customs的查询权限 此时即使显示的授予用户Landy表Customs的访问权限 则该用户仍然不能够访问表Customs 因为拒绝权限总是被优先执行 所以说 用户最终得到的是对象上所授予 拒绝或者废除权限的全部权限的并集 其中 拒绝权限具有最优先的权利
lishixinzhi/Article/program/SQLServer/201311/22467
以上就是关于SQL 怎么创建一个只有查询数据库用户权限呢全部的内容,包括:SQL 怎么创建一个只有查询数据库用户权限呢、sql如何把拷贝用户权限、SQL怎样取消修改数据库的权限等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)