从登陆名与用户名的区别说起,谈SQL Server安全性初步
目录
概述
登陆名的作用域是SQL Server数据库引擎,要连接到具体的数据库并进行相应操作,登陆名还需要映射到数据库用户名,并为用户名指定数据库角色。
登陆名有一个服务器角色,如果配置选上sysadmin角色,则不用再映射用户名,就可以对所有数据库进行一切操作,当然这样做是不安全的。
用户名的作用域是具体数据库级别,登陆名要映射到每个数据库的用户名(一般默认为自带用户名dbo),进一步地,还可以为配置其数据库角色
架构就是一个命名空间,标识一系统对象的集合,与用户名是完全独立的,一个架构可被任何用户拥有,并且是可转移的。
相关示例脚本
--创建登陆名(首次登陆必须改密码)
CREATE LOGIN [Jay] WITH PASSWORD=N'1234' MUST_CHANGE, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON;
--登陆名映射数据库用户名
USE [TestDB];
CREATE USER [Jay] FOR LOGIN [Jay];
--为登陆名添加sysdamin服务器角色
EXEC master..sp_addsrvrolemember @loginame = N'Jay', @rolename = N'sysadmin'
--为用户添加db_owner数据库角色
USE [TestDB];
EXEC sp_addrolemember N'db_owneer', N'Jay';
-- 更改用户dbo对应的登陆名
EXEC sp_changedbowner 'Jay';
--更改登陆名密码
ALTER LOGIN [Jay] WITH PASSWORD=N'`1234';
--赋予用户对表的select权限(其他对象和权限类似)
USE [TestDB];
GRANT SELECT ON dual TO Jay;
--赋予用户数据库对象的select权限(其他权限类似)
USE [TestDB];
GRANT SELECT TO Jay;
--收回用户对表的select权限
USE [TestDB];
REVOKE SELECT ON dual TO Jay;
###参考文档###
安全性与保护,总目录
安全性操作语句