SQLServer安全与权限之学习
公司新部署一台数据库服务器,由于涉及到多个项目使用,考虑通过不同登录名,来控制对不同数据库的权限。随着使用的深入,对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安全与权限之学习相关推荐
- sqlserver 2012实施与管理学习笔记(一):选型和部署之单机部署、故障转移群集与日志传送
sqlserver 2012实施与管理学习笔记(一):选型和部署之单机部署.故障转移群集与日志传送 数据库的选型和部署 sqlserver的安装和升级 选择高可用性和灾难恢复技术 故障转移群集 日志传 ...
- sqlserver 新建只读权限用户
1,新建只能访问某一个表的只读用户. --添加只允许访问指定表的用户: execsp_addlogin'用户名','密码','默认数据库名' --添加到数据库 execsp_grantdbaccess ...
- python设置文件权限_PYTHON学习之文件操作;
PYTHON学习之文件操作: 文件内容替换 for line in flielinput.input("filepath",inplace=1): line = line.repa ...
- oracle 创建角色 权限设置,[学习笔记] Oracle创建用户、分配权限、设置角色,
[学习笔记] Oracle创建用户.分配权限.设置角色, 创建用户 create user student --用户名 identified by "123456" --密码 de ...
- docker安装redis提示没有日记写入权限_Docker 学习笔记(第六集:使用 Dockerfile 定制镜像)...
ethan 读完需要 11分钟 速读仅需 4 分钟 / 使用 Dockerfile 定制镜像 / 什么是 Dockerfile 呢? Dockerfile 是一个文本文档,其中包含用户可以在命令行上调 ...
- mysql pma用户_MYSQL用户权限管理学习笔记
MYSQL用户管理 1.权限表 MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类: (1) 超级管理员用户(root),拥有全部权限 (2) 普通用户,由root ...
- MySQL之权限索引学习整理
显示本地root用户权限 show grants for root@localhost\G; 显示任意%域用户权限 show grants for root\G; 查询所有用户 select * fr ...
- java 权限url权限_SpringBootSecurity学习(11)网页版登录之URL动态权限
动态权限 前面讨论用户登录认证的时候,根据用户名查询用户会将用户拥有的角色一起查询出来,自动实现判断当前登录用户拥有哪些角色.可以说用户与角色之间的动态配置和判断security做的非常不错.不过在配 ...
- linux chattr 无权限,从零开始学习Linux(二十八):文件权限之chattr权限
1.chattr命令 命令格式: chattr [+-=] [选项] 文件名或者目录名: 参数说明: +:增加权限: -:删除权限: = 等于某权限: 选项说明: i:如果对文件设置i属性,则不允许对 ...
最新文章
- 、|| 和 、| 的区别(详尽版)
- Java常见数据结构以及特点、使用场景
- 一分钟先生之拨云见日看绩效
- 秘鲁国家馆中国电商平台 美食周对话国际农民丰收节贸易会
- 微信支付接口开发过程
- input发送a.jax_JAX-RS 2.0:服务器端处理管道
- B - Frogger(最短路之多条最短路径中最大权值的最小值)
- r语言plotmds_多元统计分析R语言建模| 11 多维标度法MDS
- android AChartEngine源码
- python行业中性_知乎
- Discussing a meal讨论餐饭(口语小白)
- Android中的事件处理总结
- python 对excel的函数操作_自动化报表(3)
- 内置方法和模块的应用
- STM32中断分配——抢占优先级与响应优先级
- Is the influences futural AI bring to software engineers are that scary?
- 从旧金山到瑞典的开发者的福利
- duo是什么意思_duo是什么意思_duo的翻译_音标_读音_用法_例句_爱词霸在线词典
- 机器人编程趣味实践20-版本课程(教学)
- 历史上最著名的十大思想实验(转)
热门文章
- 共建手机页游生态圈 腾讯助力Cocos秋季峰会
- 来自平凡世界而不平凡的他---飞扬浩天(feiyanghaotian) >>点开详细页
- Spring安装和使用(Eclipse环境)
- 为大家整理的大一上学期专业课考核标准,各位需要自取(PS:此为大数据专业,大家具体看老师安排哦~)
- 机器学习: 简单讲极大似然估计和贝叶斯估计、最大后验估计
- Microsoft Windows Office 2019官方下载链接
- [联合早报]中国明后两年就业压力最大
- 机械硬盘提示由于IO设备错误,无法运行此项请求,要怎样寻回数据
- ManageEngine卓豪助力普华永道构建企业安全IT环境
- C#中any()的用法