简介

在创建SQL server用户时会发现创建了两个账号。这里会涉及两个概念----登录名账号数据库用户
本人不详细解读(我也不熟),只是在工作中遇到,简单了解。若想深度学习请阅读网上大神们写的专业且深度的文章。

登录名

在创建用户(口头概念,非数据库用户)时,第一步是创建登录名账号,且会设置其密码。在使用代码连接数据库时,或者相关工具连接数据库(如navicat)时,用到的用户名和密码就是这个。所以登录名账号是用来连接SQL server数据库引擎的。比如默认且最高权限的登录名账号----sa。

数据库用户

第二步则是创建一个数据库用户,且不用设置密码,且会绑定到登录名账号。数据库用户顾名思义是管理数据库的,可以为这个角色分配数据库权限乃至细致到表的增删改查权限。
一个数据库用户只能绑定一个登录名账号。所以登录名账号是通过数据库用户来操作数据库的,对此数据库的权限也要看绑定的数据库用户。
每个数据库的用户并不相通,但是可以每个数据库创建相同名称的用户名。

概念总结

  • 登录名账号是用来连接数据库的。
  • 数据库用户是用来管理数据库的(即权限分配)。
  • 一个数据库用户只能绑定一个登录名账号。

sql语句

登录名语句

  1. 创建
CREATE LOGIN [login_name] WITH PASSWORD = 'password';
  1. 删除
DROP LOGIN [login_name];

数据库用户语句

  1. 创建
USE [database_name]
CREATE USER [user_name] FOR LOGIN [login_name];
  1. 删除
USE [database_name]
DROP USER [user_name];

授权限语句

  1. 授予数据库角色
USE [database_name]
ALTER ROLE [role_name] ADD MEMBER [user_name];

其中,[database_name]是数据库名称,[role_name]是数据库角色的名称,[user_name]是要授权的数据库用户名。

  1. 授予对象权限
USE [database_name]
GRANT [permission_type] ON [object_name] TO [user_name];

其中,[database_name]是数据库名称,[permission_type]是权限类型(如SELECT、INSERT、UPDATE、DELETE等),[object_name]是要授权的对象名(如表、视图、存储过程等),[user_name]是要授权的数据库用户名。

  1. 授予特定权限
USE [database_name]
GRANT [permission] TO [user_name];

其中,[database_name]是数据库名称,[permission]是特定权限(如EXECUTE、ALTER、REFERENCES等),[user_name]是要授权的数据库用户名。
请注意,授权操作需要具有足够的权限。通常,只有拥有db_owner或db_securityadmin角色的用户才能执行这些操作。此外,授权也可以通过授予数据库级别或对象级别的角色来完成,具体情况可以根据实际需要进行调整。