SQL Server 新建登录名以及用户授权
作者:mmseoamin日期:2024-01-18

一,背景

最近公司要把数据库按照项目,重新建立数据库登录名用户,并且新的登录名只能管理该项目下的数据库。

公司的数据库服务器上有很多项目数据库,之前一直是统一使用sa让应用连接数据库,为了提高数据的安全性,要禁用sa账户,因为这个账户权限太高,需要为每个项目单独创建一个登录名和用户。

开发要求:最好每个用户只能看到自己授权的数据库。

比如:

sa登录名的视角

数据库:

DataBase1

DataBase2

DataBase3

user1登录名的视角(假如,user1被授权的数据库为DataBase1)

数据库:

DataBase1

二,登录名与用户名的区别

“登录名登录后,通过检查数据库有没有与该登录名映射到用户名,如果有则赋予该登录名相应权限,如果无则拒绝赋予该登录名权限”。也就是说通过数据库用户名来确定该登录名对哪些数据库具有权限。

就像大楼和房间的例子:一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。

引用自:登录名与用户名的区别

三,操作步骤

方案1

1,sa账户登录

2,单击 安全性 --》登录名 --》右键 新建登录名

SQL Server 新建登录名以及用户授权,在这里插入图片描述,第1张

3,输入 登录名,密码,取消 强制密码过期

SQL Server 新建登录名以及用户授权,在这里插入图片描述,第2张

3,点击 服务器角色

勾选,public(默认勾选)

SQL Server 新建登录名以及用户授权,在这里插入图片描述,第3张

sysadmin 执行SQL Server中的任何操作

serveradmin 配置服务器设置

setupadmin 安装复制和管理扩展过程

securityadmin 管理登录和CREATE DATABASE的权限以及阅读审计

processadmin 管理SQL Server进程

dbcreator 创建和修改数据库

diskadmin 管理磁盘文件

4,用户映射,只勾选当前用户负责的数据库,

数据库角色成员身份,勾选:db_owner。如果授权多个数据库,每个数据库都要勾选上db_owner。

勾选要授权的数据库,然后再下方窗格中勾选 db_owner。如果是授权多个数据库,一定要挨个操作,我在这里被坑了很久。

SQL Server 新建登录名以及用户授权,在这里插入图片描述,第4张

‘db_owner’ --拥有数据库全部权限,包括删除数据库权限 ‘db_accessadmin’ - - 只给数据库用户创建其他数据库用户的权限,而没有创建登录用户的权限。

‘db_securityadmin’ --可以管理全部权限、对象所有权、角色和角色成员资格

‘db_ddladmin’ --可以发出所有DDL(Create,Alter和Drop),但不能发出GRANT、REVOKE或DENY语句

‘db_backupoperator’ --允许对数据库进行备份和还原的权限【备份与还原是通过sql sever management

studio也可以进行】

‘db_datareader’ --可以选择数据库内任何用户表中的所有数据

‘db_datawriter’ --可以更改数据库内任何用户表中的所有数据

‘db_denydatareader’ --不能查询数据库内任何用户表中的任何数据 ‘db_denydatawriter’ --不能更改数据库内任何用户表中的任何数据

5,最后点击确定即可。

注意:

这种方式创建的用户,对于数据库来说并不是数据库的拥有者,所以在<安全对象> 当勾选 <查看任意数据库> 拒绝的复选框时,会发现没有任何数据库显示。取消勾选后,又可以看到所有数据库,只是未授权的数据库点击后提示:无法访问数据库。

SQL Server 新建登录名以及用户授权,在这里插入图片描述,第5张

这时,需要把对应数据库里对应的用户删除掉,然后再执行这句代码。将数据库的拥有者权限赋给login_name。

ALTER AUTHORIZATION ON DATABASE::databaseName TO login_name

方案2

1,sa账户登录

2,单击 安全性 --》登录名 --》右键 新建登录名

SQL Server 新建登录名以及用户授权,在这里插入图片描述,第1张

3,输入 登录名,密码,取消 强制密码过期

SQL Server 新建登录名以及用户授权,在这里插入图片描述,第2张

4,点击确定,点击新建查询

将指定数据库的所有权移交给这个登录名用户。即可。

MonitorData 替换为你的数据库

user 替换为你的登录名

ALTER AUTHORIZATION ON database:: [MonitorData] TO [user]

5,取消查看任意数据库权限

如果不想要显示该用户未授权的数据库,只需要在该登录名的属性–》安全对象–》查看任意数据 勾选拒绝。

4,总结

微软的SQLServer是学习的好地方,值得深入研究,有任何问题也可以评论或者私信我。

微软SQLServer官方文档地址

一起学习,共同成长。