sqlserver用户角色
Ⅰ 请问在sqlServer 2000中用户和角色的区别以及对象权限和语句权限的区别。麻烦用规范语言作答。
/*--示例说明
示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/
USE pubs
--创建角色 r_test
EXEC sp_addrole 'r_test'
--授予 r_test 对 jobs 表的所有权限
GRANT ALL ON jobs TO r_test
--授予角色 r_test 对 titles 表的 SELECT 权限
GRANT SELECT ON titles TO r_test
--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC sp_addlogin 'l_test','pwd','pubs'
--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC sp_grantdbaccess 'l_test','u_test'
--添加 u_test 为角色 r_test 的成员
EXEC sp_addrolemember 'r_test','u_test'
--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
DENY SELECT ON titles TO u_test
/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/
--从数据库 pubs 中删除安全账户
EXEC sp_revokedbaccess 'u_test'
--删除登录 l_test
EXEC sp_droplogin 'l_test'
--删除角色 r_test
EXEC sp_droprole 'r_test'
首先,做好用户安全:
--简单的,只允许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' --删除登录
如果在企业管理器中创建的话,就用:
企业管理器--安全性--右键登录--新建登录
常规项
--名称中输入用户名
--身份验证方式根据你的需要选择(如果是使用windows身份验证,则要先在操作系统的用户中新建用户)
--默认设置中,选择你新建的用户要访问的数据库名
服务器角色项
这个里面不要选择任何东西
数据库访问项
勾选你创建的用户需要访问的数据库名
数据库角色中允许,勾选"public","db_ownew"
确定,这样建好的用户与上面语句建立的用户一样
---------------------------------------------------------------------------
最后一步,为具体的用户设置具体的访问权限,这个可以参考下面的最简示例:
--添加只允许访问指定表的用户:
exec sp_addlogin '用户名','密码','默认数据库名'
--添加到数据库
exec sp_grantdbaccess '用户名'
--分配整表权限
GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用户名]
--分配权限到具体的列
GRANT SELECT , UPDATE ON table1(id,AA) TO [用户名]
-------------------------------------------------------------------
至于具体的安全设置和理论知道,参考SQL联机帮助
Ⅱ sqlserver中的用户可以创建几种数据库角色
SQL Server 2000 和 SQL Server 7.0 版在安装过程中定义几个固定角色。可以在这些角色中添加用户以获得相关的管理权限。下面是服务器范围内的角色。
固定服务器角色 描述
sysadmin 可以在 SQL Server 中执行任何活动。
serveradmin 可以设置服务器范围的配置选项,关闭服务器。
setupadmin 可以管理链接服务器和启动过程。
securityadmin 可以管理登录和 CREATE DATABASE 权限,还可以读取错误日志和更改密码。
processadmin 可以管理在 SQL Server 中运行的进程。
dbcreator 可以创建、更改和除去数据库。
diskadmin 可以管理磁盘文件。
bulkadmin 可以执行 BULK INSERT 语句。
可以从 sp_helpsrvrole 获得固定服务器角色的列表,可以从 sp_srvrolepermission 获得每个角色的特定权限。
每个数据库都有一系列固定数据库角色。虽然每个数据库中都存在名称相同的角色,但各个角色的作用域只是在特定的数据库内。例如,如果 Database1 和 Database2 中都有叫 UserX 的用户 ID,将 Database1 中的 UserX 添加到 Database1 的 db_owner 固定数据库角色中,对 Database2 中的 UserX 是否是 Database2 的 db_owner 角色成员没有任何影响。
固定数据库角色 描述
db_owner 在数据库中有全部权限。
db_accessadmin 可以添加或删除用户 ID。
db_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格。
db_ddladmin 可以发出 ALL DDL,但不能发出 GRANT、REVOKE 或 DENY 语句。
db_backupoperator 可以发出 DBCC、CHECKPOINT 和 BACKUP 语句。
db_datareader 可以选择数据库内任何用户表中的所有数据。
db_datawriter 可以更改数据库内任何用户表中的所有数据。
db_denydatareader 不能选择数据库内任何用户表中的任何数据。
db_denydatawriter 不能更改数据库内任何用户表中的任何数据。
可以从 sp_helpdbfixedrole 获得固定数据库角色的列表,可以从 sp_dbfixedrolepermission 获得每个角色的特定权限。
数据库中的每个用户都属于 public 数据库角色。如果想让数据库中的每个用户都能有某个特定的权限,则将该权限指派给 public 角色。如果没有给用户专门授予对某个对象的权限,他们就使用指派给 public 角色的权限。
Ⅲ sqlserver2008创建新用户时的架构和角色怎么选
sa是登录名 可以在sqlserver管理器的服务器级别下的安全性-> 登录名中查看
或者在目录视图中sys.server_principals 和 sys.sql_logins
(select *
from sys.sql_logins
go
select *
from sys.server_principals)中查看
默认情况下,sa登录名在各数据库中对应的用户是dbo用户,
dbo是数据库的默认用户。sql Server 安装之后,dbo用户就自动
存在了。dbo用户拥有在数据库中操作的所有权限。SQL_USER与 WINDOWS_USER
在你刚进入sqlserver管理器的时候有身份验证选项有Windows身份验证和sql server身份验证
本地机器上当然可以选择Windows身份验证,远程就只有sql server身份验证
以上仅是个人理解有误之处还请告知
Ⅳ SQLServer的用户和系统用户是什么关系
登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中 用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。 SQLSERVER把登录名与用户名的关系称为映射。用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库 一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。 链接或登录Sql Server服务器时是用的登录名而非用户名登录的,程序里面的链接字符串中的用户名也是指登录名 我们常见的dbo(用户名)是指以sa(登录名)或windows administration(Windows集成验证登录方式)登录的用户,也就是说数据库管理员在SQLSERVER中的用户名就叫dbo,而不叫 sa,这一点看起来有点蹊跷,因为通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字),例如创建了一个登录名称为me,那么可以为该登录名me在指定的数据库中添加一个同名用户,使登录名me能够访问该数据库中的数据.当在数据库中添加了一个用户me 后,之后以me登录名登录时在该数据库中创建的一切对象(表,函数,存储过程等)的所有者都为me,如me.table1,me.fn_test(),而不是dbo.table1,dbo.fn_test(). SQL Server中还有一个特殊的数据库角色public,它存在于每一个数据库中,包括系统数据库,如master、msdb、model和用户数据库,数据库的所有用户都属于public角色,并且不能从public角色中删除。
Ⅳ 确定SQLServer用户是否属于某个角色
对数据库正常功能的访问常常取决于赋予指定用户的权利。例如,管理人员可能需要(一定的)权限来运行特定的查询或者存储过程,而向他们进行报告的用户则没有(这一权限)。对于一个很小的机构而言,你可以为具体的用户赋予具体的权利,但是随着用户数量的增长,这种方法会变得越来越难以处理。即使只有50个用户,维护工作也会成为你的恶梦。 包含我们感兴趣数据的表格是sysusers和sysmembers。前面一个表格包含有关于用户和角色的数据,而这两者由IsSQLRole这个数据列来区分,如果数据行表示的是一个角色而不是一个用户,那么IsSQLRole数据列就包含有1。下面的代码列出了所有的用户和角色: SELECT Member = Users.name, Role = Roles.Name FROM sysusers Users, sysusers Roles, sysmembers Members WHERE Roles.uid = Members.groupuid AND Roles.issqlrole = 1 AND Users.uid = Members.memberuid ORDER BY 2, 1 要列出属于指定角色的成员的用户,就要把代码更改为下面这样: DECLARE @role varchar(100) SET @role = 'Managers' SELECT MemberName = Users.name, RoleName = Roles.Name FROM sysusers Users, sysusers Roles, sysmembers Members WHERE Roles.name = @role AND Roles.uid = Members.groupuid AND Roles.issqlrole = 1 AND Users.uid = Members.memberuid 你可能更习惯把这段代码转化成用户定义函数(user-defined function,UDF),它会返回一个布尔函数,用来指示当前用户是否是所关心的角色的成员。把变量@role变成一个参数,并传递它而不是定义它,就像我在上面做的一样。利用它,你可以编写出自己的应用程序代码,在任何你需要确定给定用户角色的时候调用这个函数。
Ⅵ SQL试题 解答题: 角色有哪几种,角色和用户有哪些关系
--用户指的是数据库用户,单纯的用户是没有任何权限的,需要给相应的角色才可以
--不明白可以随时来问我,希望采纳
SqlServer固定服务器角色:
1、bulkadmin服务器级权限已授予:ADMINISTERBULKOPERATIONS
2、dbcreator服务器级权限已授予:CREATEDATABASE
3、diskadmin服务器级权限已授予:ALTERRESOURCESSqlServer2005固定服务器角色:
4、processadmin服务器级权限已授予:ALTERANYCONNECTION、ALTERSERVERSTATE
5、securityadmin服务器级权限已授予:ALTERANYLOGIN6、serveradmin服务器级权限已授予:ALTERANYENDPOINT、ALTERRESOURCES、ALTERSERVERSTATE、ALTERSETTINGS、SHUTDOWN、VIEWSERVERSTATE
7、setupadmin服务器级权限已授予:固定服务器角色:
8、sysadmin服务器级权限已使用GRANT选项授予:CONTROLSERVER
Ⅶ 关于SQL Server创建登录名,用户,角色方面的
--通过sp_addlogin创建登录名
execute sp_addlogin 'zhangsan','112233'
use test
go
--指定登录名为zhangsan,并且创建test数据库中的用户zzx
execute sp_grantdbaccess 'zhangsan','zzx'
--授予用户zzx拥有businessDeal表的select权限
grant select on businessDeal to zzx
--添加数据库角色
execute sp_addrole 'work'
--添加角色为work的成员zzx
execute sp_addrolemember 'work','zzx'
--设置角色work拥有BusinessDeal表的update权限
grant update on BusinessDeal to work
Ⅷ 请教关于sqlserver登录账户和用户的关系
1. 首先在 SQL Server 服务器级别,创建登陆帐户(create login)
--创建登陆帐户(create login)
create login dba with password='abcd1234@', default_database=mydb
登陆帐户名为:“dba”,登陆密码:abcd1234@”,默认连接到的数据库:“mydb”。 这时候,dba 帐户就可以连接到 SQL Server 服务器上了。但是此时还不能 访问数据库中的对象(严格的说,此时 dba 帐户默认是 guest 数据库用户身份, 可以访问 guest 能够访问的数据库对象)。
要使 dba 帐户能够在 mydb 数据库中访问自己需要的对象, 需要在数据库 mydb 中建立一个“数据库用户”,赋予这个“数据库用户” 某些访问权限,并且把登陆帐户“dba” 和这个“数据库用户” 映射起来。 习惯上,“数据库用户” 的名字和 “登陆帐户”的名字相同,即:“dba”。 创建“数据库用户”和建立映射关系只需要一步即可完成:
2. 创建数据库用户(create user):
--为登陆账户创建数据库用户(create user),在mydb数据库中的security中的user下可以找到新创建的dba
create user dba for login dba with default_schema=dbo
并指定数据库用户“dba” 的默认 schema 是“dbo”。这意味着 用户“dba” 在执行“select * from t”,实际上执行的是 “select * from dbo.t”。
3. 通过加入数据库角色,赋予数据库用户“dba”权限:
--通过加入数据库角色,赋予数据库用户“db_owner”权限
exec sp_addrolemember 'db_owner', 'dba'
此时,dba 就可以全权管理数据库 mydb 中的对象了。
Ⅸ 录,用户,角色的概念如何区分三者在sql server中有何关系
架构(Schema)是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。可以将架构看成一个存放数据库中对象的一个容器。架构实际上在sqlserver2000中就已经存在,当我们使用查询分析器去查询一个表的时候,一个完整的表的名称应该包括服务器名.数据库名.用户名.对象名,而在sqlserver2005中一个表的完全限定名称应该为服务器名.数据库名.架构名.对象名在2000中,假如有一个账户tt在test数据库中创建了一张表table1的时候,在服务器上对查询的语句应为select*fromtest.tt.table1,也就是说,在sqlserver2000中一张表所属的架构默认就是表的创建者的登录名称,用户可以和修改他所创建的所有数据库对象。
Ⅹ sqlserver 2012 服务器角色怎么选
1. 创建服务器角色
[sql] view plain print?
-- 【创建服务器角色】
CREATE SERVER ROLE TestServerRole --服务器角色
AUTHORIZATION KK --所有者
GO
ALTER AUTHORIZATION ON SERVER ROLE::[TestServerRole] TO [PC\Administrator]--更改所有者为[PC\Administrator]
GO
2. 更改服务器角色
[sql] view plain print?
-- 【更改服务器角色】
-- 注: 以下MEMBER 可以是登录名或用户定义的服务器角色。MEMBER 不能是固定服务器角色、数据库角色或 sa。
--即登录账号[kk]拥有服务器角色[TestServerRole]权限
ALTER SERVER ROLE [TestServerRole] ADD MEMBER [kk]
GO
--更名
ALTER SERVER ROLE [TestServerRole] WITH NAME = [NewTestServerRole]
GO
--即服务器角色[TestServerRole]拥有服务器角色[dbcreator]权限
ALTER SERVER ROLE [dbcreator] ADD MEMBER [NewTestServerRole]
GO
可以看到服务器角色名字变更了,同时角色成员用记录有登录账号 “KK”
数据库角色 NewTestServerRole 的服务器角色成关系中 勾选上了 dbcreator ,即服务器角色NewTestServerRole 也有了角色 dbcreator 的权限!