关于MSSQL用户高置的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于MSSQL用户高置的问题相关的知识,希望对你有一定的参考价值。

我想让一个MSSQL数据库用户只能使用插入语句,其他语句,如:SELECT语句都不可以用,请问应该怎么设置,请教高手!

要控制对数据库的权限, 可以参考下面的:

-- 防止访问他不该访问的数据库(总控制,明细还可以控制他对于某个数据库的具体对象具有的权限)

--切换到你新增的用户要控制的数据库
use 你的库名
go

--新增用户
exec sp_addlogin 'test' --添加登录
exec sp_grantdbaccess N'test' --使其成为当前数据库的合法用户
exec sp_addrolemember N'db_owner', N'test' --授予对自己数据库的所有权限

--这样创建的用户就只能访问自己的数据库,及数据库中包含了guest用户的公共表
go

--删除测试用户
exec sp_revokedbaccess N'test' --移除对数据库的访问权限
exec sp_droplogin N'test' --删除登录

如果在企业管理器中创建的话,就用:

企业管理器--安全性--右键登录--新建登录

常规项
--名称中输入用户名
--身份验证方式根据你的需要选择(如果是使用windows身份验证,则要先在操作系统的用户中新建用户)
--默认设置中,选择你新建的用户要访问的数据库名

服务器角色项
这个里面不要选择任何东西

数据库访问项
勾选你创建的用户需要访问的数据库名
数据库角色中允许,勾选"public","db_ownew"

确定,这样建好的用户与上面语句建立的用户一样
---------------------------------------------------------------------------

最后一步,为具体的用户设置具体的访问权限,这个可以参考下面的最简示例:

--添加只允许访问指定表的用户:
exec sp_addlogin '用户名','密码','默认数据库名'

--添加到数据库
exec sp_grantdbaccess '用户名'

--分配整表权限
GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用户名]

--分配权限到具体的列
GRANT SELECT , UPDATE ON table1(id,AA) TO [用户名]

-------------------------------------------------------------------
至于具体的安全设置和理论知道,参考SQL联机帮助
参考技术A 对该用户只赋 insert 权限

MSSQL 多用户访问

【中文标题】MSSQL 多用户访问【英文标题】:MSSQL multi-user access 【发布时间】:2014-01-31 09:38:57 【问题描述】:

我在使用 MSSQL 实例时遇到问题,有时会出现死锁。我有一个表 A,其中包含温度测量值。我的应用程序包含 1-10 个工作线程,它们通过 TCP 从远程位置收集测量值,然后希望将它们存储在数据库中。当然,这些工人使用交易来执行他们的任务。事务的 IsolationLevel 设置为 ReadCommitted。仍然会发生死锁,并且数据库服务器的 CPU 负载达到 100%。谁能告诉我,我必须考虑什么才能让这个工作?我以为数据库系统会为我做多用户同步。至少这是我在大学学到的。

【问题讨论】:

该大学还教导说,死锁是数据库确保“多用户同步”的后果。阅读Detecting and Ending Deadlocks。您在 Table A 上缺少索引。 【参考方案1】:

我的建议是创建另一个线程来处理您对数据库的更新。因此,以线程安全的方式将信息添加到线程的集合中,并让 1 个工作线程对表进行更新/插入。您甚至可以连接 10-30 条这样的语句并一起执行。

这就是我们在 SMS Sender 上所做的,我们使用了多达 50 个线程,每个线程每 100 毫秒发送一条 SMS 一条 SMS。它对我们非常有效。

【讨论】:

这个完全一样,我想出来的。但我还有另一个应用程序将存储的数据作为网络服务提供服务...... 这很可能是你得到死锁的原因,因为你是从你更新的同一个表中选择的。当您从其他应用程序中进行选择时,添加WITH (NOLOCK) 或将您的隔离级别更改为未提交读。 (***.com/questions/686724/…)。如果您不从一侧回滚数据,并且在选择 web 服务时不从其他地方进行另一次更新,那么您应该没有问题。 考克斯,你不能两全其美。你必须决定什么是最重要的。您不必在编辑时锁定记录吗?工作线程是否再次更新这些相同的记录。如果没有,那么没有问题。阅读信息,对其进行操作,然后更新记录。否则,您需要围绕该问题重新考虑您的架构。 问题在于,我没有能力只锁定 想要的东西。正如我现在看到的情况,我只能提供一个带有 IsolationLevel 的事务,就是这样。锁由 NHibernate 或 .NET 魔术数据库框架获取。真的吗?在许多情况下,两个进程不会访问相同的数据,但是当他们访问时,我必须克服这个问题。如果 web 服务必须等待收集服务完成也没关系,但现在数据库系统只允许在这种情况下出现死锁。

以上是关于关于MSSQL用户高置的问题的主要内容,如果未能解决你的问题,请参考以下文章

mssql关于文件操作的问题

下一个关于俄罗斯编码、mssql 和 python 的问题

51单片机的中断优先级及中断嵌套

关于确保用户收到他在 android 上安排的通知的问题?

Android - 关于使用 jdbc 连接到 MSSQL 的 classnotfound

PHP连接MSSQL数据库的方法,PHPWAMP如何连接MSSQL数据库(极度详细)