第二章 SQLserver常见用户授权配置

一、创建登录用户

1.登录数据库

#1.进入master库
USE [master]

#2.创建用户语法
CREATE LOGIN [登录名] WITH
password={ 'password' | hashed_password hashed }
[must_change][,]
[sid=0x14585E90117152449347750164BA00A7][,]
[default_database=database_name][,]
[default_language=language][,]
[check_expiration={ on | off }][,]
[check_policy={ on | off }][,]
[credential=credential_name]

2.语法块含义

#1.--login_name	指定创建的登录名。

有四种类型的登录:SQLServer登录、Windows登录、证书映射登录和非对称密钥映射登录。
--在创建从Windows域帐户映射的登录名时,必须以[<domainName><login_name>]格式使用Windows 2000之前的用户登录名。 
--不能使用login_name@DomainName格式的UPN。 
--身份验证登录的类型为sysname,它必须符合标识符规则,且不能包含“”。 
--Windows登录名可以包含“”。Active Directory用户的登录名需少于21个字符。

#2.--password 指定创建用户的密码
有两种密码类型:
--password='password*' 
--仅适用于SQL Server登录。指定正在创建的登录名的密码。应使用强密码。 
--有关详细信息,请参阅强密码和密码策略。从SQL Server 2012 (11.x)开始,存储的密码信息使用 SHA-512 加盐密码进行计算。
--密码是区分大小写的。密码应始终至少包含 8 个字符,并且不能超过128个字符。 
--密码可以包含 a-z、A-Z、0-9 和大多数非字母数字字符。 密码不能包含单引号或 login_name。

--password=hashed_password
--仅适用于hashed关键字。指定要创建的登录名的密码的哈希值。
--hashed仅适用于SQL Server登录。指定在password参数后输入的密码已经过哈希运算。 
--如果未选择此选项,则在将作为密码输入的字符串存储到数据库中之前,对其进行哈希运算。 
--此选项应仅用于在服务器之间迁移数据库。切勿使用hashed选项创建新的登录名。hashed选项不能用于SQL 7或更早版本创建的哈希。

#3.--must_change 首次登录设置新密码
--仅适用于SQL Server登录。如果包括此选项,则SQL Server将在首次使用新登录时提示用户输入新密码。

#4.--sid=sid 用于重新创建登录名
--用于重新创建登录名。仅适用于SQL Server身份验证登录,不适用于Windows身份验证登录。指定新SQL Server身份验证登录的sid。
--如果未使用此选项,SQL Server将自动分配sid。sid结构取决于SQL Server版本。 QL Server登录sid:基于GUID的16 字节(binary(16))文本值。 例如,sid 0x14585E90117152449347750164BA00A7。

#5.--default_database=database 用于指定默认数据库
--指定将指派给登录名的默认数据库。如果未包括此选项,则默认数据库将设置为master。

#6.--default_language=language 用于指定登录的语言
--指定将指派给登录名的默认语言。如果未包括此选项,则默认语言将设置为服务器的当前默认语言。即使将来服务器的默认语言发生更改,登录名的默认语言也仍保持不变。

#7.--check_expiration={ on | off } 用于指定是否强制实施密码过期策略
--仅适用于SQL Server登录。 指定是否应对此登录帐户强制实施密码过期策略。 默认值为off。

#8.--check_policy={ on | off } 用于指定实施的密码策略
--仅适用于SQL Server登录。 指定应对此登录强制实施运行SQL Server 计算机的 Windows 密码策略。 默认值为on。
--如果 Windows 策略要求强密码,密码必须至少包含以下四个特点中的三个:
--大写字符 (A-Z)。
--小写字符 (a-z)。
--数字 (0-9)。
--一个非字母数字字符,如空格、、@、*、^、%、!、$、# 或 &。

#9.--credential=credential_name 用于映射登录凭据
--将映射到新SQL Server登录的凭据名称。 该凭据必须已存在于服务器中。当前此选项只将凭据链接到登录名。凭据不能映射到系统管理员(sa)登录名。

3.常用示例

#1.最快速创建方式:
USE [master]
CREATE LOGIN [登录名] WITH PASSWORD=N'密码', DEFAULT_DATABASE=[test], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

#2.普通创建方式:
--声明引用数据库
use tests;

--创建登录用户
create login '登录名'
with 
password='123456',
--must_change,
--sid=0x14585E90117152449347750164BA00A7,
default_database=master,
--default_language=language,
check_expiration=off,
check_policy=off
--credential=[sysadmin]

二、账户服务器角色授权

1.常用服务器角色类型

@rolename枚举值(角色权限):
#1.bulkadmin            --可以运行BULK INSERT语句
#2.dbcreator            --可以创建、修改数据库    
#3.diskadmin            --用户管理磁盘文件
#4.processadmin         --可以终止SQL SERVER实例中的进程
#5.public               --默认且不可修改    
#6.securityadmin        --管理和审核登录账户
#7.serveradmin          --可以更改服务器范围的配置选项和关闭服务器
#8.setupadmin           --配置复制和链接服务器
#9.sysadmin             --执行任何活动

2.单独授权服务器角色

#1.声明引用数据库
USE [master] 

#2.创建登录名并授权服务器角色
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'sysadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'bulkadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'dbcreator'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'diskadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'processadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'securityadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'serveradmin'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'setupadmin'
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'sysadmin'

3.删除服务器角色

#1.声明引用数据库
USE [master] 

#2.删除账户角色
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'sysadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'bulkadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'dbcreator'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'diskadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'processadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'securityadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'serveradmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'setupadmin'
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'sysadmin'

4.单用户添加多个服务器角色

#1.声明引用数据库
USE [master] 

#2.添加多个服务器角色,服务器角色用于向用户授权服务器范围内的安全特权
alter server role [bulkadmin] add member '登录名';
alter server role [dbcreator] add member '登录名';
alter server role [diskadmin] add member '登录名';
alter server role [processadmin] add member '登录名';
alter server role [securityadmin] add member '登录名';
alter server role [serveradmin] add member '登录名';
alter server role [setupadmin] add member '登录名';
alter server role [sysadmin] add member '登录名';

三、数据库授权

1.授权所有库

#1.声明引用数据库
USE [master] 

#2.授权所有库
EXEC master..sp_addsrvrolemember @loginame = N'登录名', @rolename = N'sysadmin'

2.访问特定数据库

#1.声明引用数据库
USE [master] 

#2.删除用户拥有的sysadmin角色
EXEC master..sp_dropsrvrolemember @loginame = N'登录名', @rolename = N'sysadmin'

#3.为登录用户创建数据库用户映射
USE databasename
create user [登录名] for login [登录名] with default_schema=dbo 

ps:此时还不可访问该数据库的对象如表、存储过程、视图等

#4.示例;
为登陆账户创建数据库用户(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.访问该数据库的所有对象

#1.声明引用数据库
USE databasename

#2.设置登录用户访问该数据库的所有对象
exec sp_addrolemember 'db_owner', '登录名' 

4.禁用该数据库的所有对象

#1.声明引用数据库
USE databasename

#2.禁用登录用户访问该数据库的所有对象
exec sp_droprolemember 'db_owner', '登录名' 

四、数据表、视图等授权

1.数据表、视图等授权分类

授权登录用户访问指定的表存储过程视图等(先禁用数据库用户拥有的db_owner角色,然后再对制定的对象赋相应的权限)

对象(表|存储过程|视图等)枚举值:
#1.ALTER              --修改
#2.CONTROL            --控制    
#3.EXECUTE            --执行
#4.TAKE OWNERSHIP     --所有权限
#5.VIEW DEFINITION    --查看定义

2.禁用该数据库的所有对象

#1.声明引用数据库
USE databasename

#2.禁用登录用户访问该数据库的所有对象
exec sp_droprolemember 'db_owner', '登录名' 

3.授权登录用户访问指定的表存储过程视图等

#1.声明引用数据库
USE databasename

#授权登录用户访问指定的表、存储过程、视图等的授权
GRANT ALTER ON [dbo].[表|存储过程|视图等名称] TO [登录名]
GRANT CONTROL ON [dbo].[表|存储过程|视图等名称] TO [登录名]
GRANT EXECUTE ON [dbo].[表|存储过程|视图等名称] TO [登录名]
GRANT TAKE OWNERSHIP ON [dbo].[表|存储过程|视图等名称] TO [登录名]
GRANT VIEW DEFINITION ON [dbo].[表|存储过程|视图等名称] TO [登录名]

4.删除对登录用户访问指定的表存储过程视图等的授权

#1. 声明引用数据库
use databasename

#2.删除对登录用户访问指定的表存储过程视图等的授权
REVOKE ALTER ON [dbo].[表|存储过程|视图等名称] TO [登录名]
REVOKE CONTROL ON [dbo].[表|存储过程|视图等名称] TO [登录名]
REVOKE EXECUTE ON [dbo].[表|存储过程|视图等名称] TO [登录名]
REVOKE TAKE OWNERSHIP ON [dbo].[表|存储过程|视图等名称] TO [登录名]
REVOKE VIEW DEFINITION ON [dbo].[表|存储过程|视图等名称] TO [登录名]

5.授权登录用户访问表的指定列

#1. 声明引用数据库use databasename#2.授权登录用户访问表的指定列GRANT SELECT ON dbo.表名(字段1,字段2...) TO [登录名]

6.批量删除数据库所有表

#1. 声明引用数据库
use databasename

#2.批量删除数据库所有表
DECLARE @DROP_STRING VARCHAR(8000)

7.删除所有表的外键约束

#1.删除所有表的外键约束
DECLARE DROP_FK CURSOR FOR
SELECT  'ALTER TABLE '+ OBJECT_NAME(PARENT_OBJ) + ' DROP CONSTRAINT '+NAME
FROM    SYSOBJECTS
WHERE   XTYPE = 'F'
OPEN DROP_FK
FETCH NEXT FROM DROP_FK INTO @DROP_STRING
WHILE(@@FETCH_STATUS=0)
BEGIN     EXEC(@DROP_STRING)     FETCH NEXT FROM DROP_FK INTO @DROP_STRING
END
CLOSE DROP_FK
DEALLOCATE DROP_FK

8.删除表

DECLARE DROP_TABLE CURSOR FOR
SELECT  'DROP TABLE '+NAME
FROM    SYSOBJECTS
WHERE   XTYPE = 'U'
OPEN DROP_TABLE
FETCH NEXT FROM DROP_TABLE INTO @DROP_STRING
WHILE(@@FETCH_STATUS=0)
BEGIN     EXEC(@DROP_STRING)     FETCH NEXT FROM DROP_TABLE INTO @DROP_STRING
END
CLOSE DROP_TABLE
DEALLOCATE DROP_TABLE
GO
原文地址:https://www.cnblogs.com/jhno1/p/15180471.html