公司新部署一台数据库服务器,由于涉及到多个项目使用,考虑通过不同登录名,来控制对不同数据库的权限。随着使用的深入,对SQLServer安全相关的东西,又有了新的了解。

登录名

首先登录数据库,用到的就是登录名,这个也是我一开始配置权限接触到的。

针对每个项目创建一个对应的登录名,默认角色public,这个时候这个登录名其实还没有权限访问任何非系统数据库的。

为登录名,配置用户映射,勾选对应项目(登录名)的数据库,勾选db_owner角色,确定。这个时候,对应登录名就有了访问这些数据库的权限了。增删改查都可以了。

用户

一开始是没注意到用户的,虽然上面有个操作就是配置用户映射。

发现问题,是在同事执行建表SQL执行报错发现的,SQL是由PD自动生成,创建表、字段备注属性的时候,出现错误的。

declare @CurrentUser sysname
print(@CurrentUser)
select @CurrentUser = user_name()
print(@CurrentUser)
execute sp_addextendedproperty 'MS_Description', 'XX实体表','user', @CurrentUser, 'table', 'XX_Table'print(@CurrentUser)
go

通过项目登录名执行,打印出来的@CurrentUser 就是 项目登录名

如果通过sa(管理员)账户执行,打印出来的@CurrentUser 就是 dbo

然后看已经创建好的表,显示的是 dbo.XX_Table

这个时候问题是找到了,通过项目账户获取到的@CurrentUser不正确,应该获取到dbo就对了。

登录名与用户名

接下来就一探究竟吧。

找到项目账户,属性,用户映射,再次看,确实发现这里用户确实是和项目登录名一样的。

然后看sa登录名的属性,用户映射,用户名都是dbo

这就很好的验证了以上问题。

网上针对登录名、用户名的比喻很形象,大概就是:

一栋大楼相当于是数据库服务器,每个房间相当于数据库,登录名是大楼钥匙,用户名是每个房间(数据库)的钥匙;

进了大楼(数据库服务器),还不能进去每个房间。需要有房间的钥匙(用户名),才可以进去到房间里。

问题怎么解决

还是回到问题,怎么解决?问度娘呗

首先,可以肯定的是,sa登录名都是没问题的(对应用户名就是dbo)

再次,查找到谁创建的数据库,这个登录名对应的用户名也是dbo(即数据库所有者)

于是,考虑给项目账户db_creator角色,这样就可以新建一个空数据库(这个时候在该数据库的用户名就是dbo),然后再还原数据库;but,这样不能还原,只能作罢!

那就找办法,看怎么可以改数据库所有者。

一开始找到的不好使,但是功夫不负有心人终于找到了。上代码:

补充@20221027---------开始-----------

后来发现直接执行如下代码是不行的,会提示用户已存在。看了下,数据库下果然有这个需要赋权限的用户(应该是新建登录名后,直接勾选Owner数据库后生成的吧)

然后删除这个用户,再执行就可以了。这样就有dbo权限了。

补充@20221027---------结束-----------

ALTER AUTHORIZATION ON DATABASE::DatabaseName TO UserName
GO
/*
DatabaseName就是数据库名称
UserName是用户名称
*/

搞定!

数据库所有者变过来了

用户映射包括相关权限,也都对的了。

问题解决,可以睡了,,,已是00点30+

不过搞明白登录名、用户名,架构还不甚清楚。。。下次搞清楚吧

对了,问题的解决,还得依赖于这位大佬的帖子。

SQL Server中修改数据库所有者的2种方法 - 红叶舞秋山2021 - 博客园 (cnblogs.com)https://www.cnblogs.com/dlnl/p/15101293.html

SQLServer安全与权限之学习相关推荐

  1. sqlserver 2012实施与管理学习笔记(一):选型和部署之单机部署、故障转移群集与日志传送

    sqlserver 2012实施与管理学习笔记(一):选型和部署之单机部署.故障转移群集与日志传送 数据库的选型和部署 sqlserver的安装和升级 选择高可用性和灾难恢复技术 故障转移群集 日志传 ...

  2. sqlserver 新建只读权限用户

    1,新建只能访问某一个表的只读用户. --添加只允许访问指定表的用户: execsp_addlogin'用户名','密码','默认数据库名' --添加到数据库 execsp_grantdbaccess ...

  3. python设置文件权限_PYTHON学习之文件操作;

    PYTHON学习之文件操作: 文件内容替换 for line in flielinput.input("filepath",inplace=1): line = line.repa ...

  4. oracle 创建角色 权限设置,[学习笔记] Oracle创建用户、分配权限、设置角色,

    [学习笔记] Oracle创建用户.分配权限.设置角色, 创建用户 create user student --用户名 identified by "123456" --密码 de ...

  5. docker安装redis提示没有日记写入权限_Docker 学习笔记(第六集:使用 Dockerfile 定制镜像)...

    ethan 读完需要 11分钟 速读仅需 4 分钟 / 使用 Dockerfile 定制镜像 / 什么是 Dockerfile 呢? Dockerfile 是一个文本文档,其中包含用户可以在命令行上调 ...

  6. mysql pma用户_MYSQL用户权限管理学习笔记

    MYSQL用户管理 1.权限表 MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类: (1)       超级管理员用户(root),拥有全部权限 (2)       普通用户,由root ...

  7. MySQL之权限索引学习整理

    显示本地root用户权限 show grants for root@localhost\G; 显示任意%域用户权限 show grants for root\G; 查询所有用户 select * fr ...

  8. java 权限url权限_SpringBootSecurity学习(11)网页版登录之URL动态权限

    动态权限 前面讨论用户登录认证的时候,根据用户名查询用户会将用户拥有的角色一起查询出来,自动实现判断当前登录用户拥有哪些角色.可以说用户与角色之间的动态配置和判断security做的非常不错.不过在配 ...

  9. linux chattr 无权限,从零开始学习Linux(二十八):文件权限之chattr权限

    1.chattr命令 命令格式: chattr [+-=] [选项] 文件名或者目录名: 参数说明: +:增加权限: -:删除权限: = 等于某权限: 选项说明: i:如果对文件设置i属性,则不允许对 ...

最新文章

  1. 、|| 和 、| 的区别(详尽版)
  2. Java常见数据结构以及特点、使用场景
  3. 一分钟先生之拨云见日看绩效
  4. 秘鲁国家馆中国电商平台 美食周对话国际农民丰收节贸易会
  5. 微信支付接口开发过程
  6. input发送a.jax_JAX-RS 2.0:服务器端处理管道
  7. B - Frogger(最短路之多条最短路径中最大权值的最小值)
  8. r语言plotmds_多元统计分析R语言建模| 11 多维标度法MDS
  9. android AChartEngine源码
  10. python行业中性_知乎
  11. Discussing a meal讨论餐饭(口语小白)
  12. Android中的事件处理总结
  13. python 对excel的函数操作_自动化报表(3)
  14. 内置方法和模块的应用
  15. STM32中断分配——抢占优先级与响应优先级
  16. Is the influences futural AI bring to software engineers are that scary?
  17. 从旧金山到瑞典的开发者的福利
  18. duo是什么意思_duo是什么意思_duo的翻译_音标_读音_用法_例句_爱词霸在线词典
  19. 机器人编程趣味实践20-版本课程(教学)
  20. 历史上最著名的十大思想实验(转)

热门文章

  1. 共建手机页游生态圈 腾讯助力Cocos秋季峰会
  2. 来自平凡世界而不平凡的他---飞扬浩天(feiyanghaotian) >>点开详细页
  3. Spring安装和使用(Eclipse环境)
  4. 为大家整理的大一上学期专业课考核标准,各位需要自取(PS:此为大数据专业,大家具体看老师安排哦~)
  5. 机器学习: 简单讲极大似然估计和贝叶斯估计、最大后验估计
  6. Microsoft Windows Office 2019官方下载链接
  7. [联合早报]中国明后两年就业压力最大
  8. 机械硬盘提示由于IO设备错误,无法运行此项请求,要怎样寻回数据
  9. ManageEngine卓豪助力普华永道构建企业安全IT环境
  10. C#中any()的用法