标签: sql-server-2008

为不同的 SQL Server 架构设置用户权限

我需要限制对特定用户的访问,但他们仍然需要能够查看 dbo 拥有的表中的数据。

我正在尝试执行以下操作:

  1. dbo 架构正常运行,可以访问所有内容
  2. schema1 架构只能访问 schema1 对象
  3. 如果 schema1 视图或存储过程访问 dbo 拥有的表中的数据,则权限链适当
  4. user1 可以访问 schema1,没有其他权限;除了#3的情况

这是我尝试过的:

  1. 使用随机密码创建映射到测试登录的 user1 用户
  2. 在 dbo 模式中创建了几个表,其中包含一些测试数据
  3. 创建了 schema1 架构
  4. 创建了一个 schema1.get_profiles,它从一个名为 schema1.profiles 的视图中进行选择,该视图访问 dbo.people、dbo.taglinks 和 dbo.tags 中的数据

但是,在以 user1 身份登录时使用以下语句:

EXEC get_profiles 1
Run Code Online (Sandbox Code Playgroud)

结果是:

The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过WITH EXECUTE AS OWNER并且无法开始理解“所有权链接”应该如何工作。

我也试过

GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server stored-procedures

16
推荐指数
1
解决办法
8万
查看次数

如何使用 T-SQL 脚本备份 SQL Server 2008 中的特定表

我想将数据库中可用的特定表备份到一个.bak文件中,所有这些都应该使用 T-SQL 脚本来完成。

sql-server-2008 sql-server sql-server-2008-r2

16
推荐指数
2
解决办法
20万
查看次数

在 LIKE 运算符中选择多个值

我有下面给出的 SQL 查询,我想使用like运算符选择多个值。

我的查询正确吗?

SELECT top 1 employee_id, employee_ident, utc_dt, rx_dt 
FROM       employee
INNER JOIN employee_mdata_history 
ON         employee.ident=employee_mdata_history.employee_ident 
WHERE      employee_id like 'emp1%' , 'emp3%' 
ORDER BY   rx_dt desc
Run Code Online (Sandbox Code Playgroud)

如果没有,有人可以纠正我吗?

我的表有大量以'emp1'和开头的数据'emp3'。我可以根据前 3 个“emp1”和前 2 个“emp3”过滤结果rx_dt吗?

sql-server-2008 sql-server operator like

16
推荐指数
2
解决办法
25万
查看次数

如何检测对数据库的任何更改(DDL 和 DML)

我客户的 SQL 服务器上有很多数据库。这些数据库正在开发中,因此开发人员可以进行设计、重构、数据修改等。有一些数据库很少更改。我的客户必须确保所有这些都安全(备份)并花一些时间管理环境。(公司没有DB管理员职位。)经过长时间的讨论,客户决定使用每日完整备份策略,因为恢复容易。

所以这里是情况的总结:

  • 数据库的数量每天都在变化。
  • 应备份已更改的数据库(意味着数据和/或结构已更改)。
  • 未更改的数据库不得备份。
  • 解决方案不应影响数据库结构(不受限制的要求)
  • 这个“备份引擎”应自动工作。

主要问题:如何检测数据库已更改。问题的第一部分(DDL 更改)可以通过使用DDL 触发器来解决。但是数据更改(DML 更改)是一个问题。不可能将 DML 触发器应用于所有数据库的所有表以跟踪更改(性能、扩展对象的管理......)。备份引擎必须跟踪所有更改以将每个数据库标记为准备备份。

  • Change Data Capture是一个解决方案,但它似乎太重了(它还需要 SQL Server 企业版)。

  • 另一种方法是跟踪数据库文件更改(大小或上次更改时间),但它无法正常工作:当数据库超过所有保留的可用空间时,它可以更改其大小,而sp_spaceused不是解决方案。

  • 跟踪是一种解决方案,但它会导致性能问题并需要额外的管理。

是否有任何解决方案可以在不影响其他数据库管理对象(如统计信息..)的情况下计算实际数据库使用大小?当然,对不改变表大小的表数据的更改不会触发(我认为),但总比没有好。我真的在寻找 SQL Server 2008 的直接或间接解决方案。

感谢您的任何评论、解决方案和想法。

添加:

这是解决方案(感谢玛丽安):

Select
    NextLSN = MAX(fn.[Current LSN])
    ,Databasename = DB_NAME()
 from fn_dblog(NULL,    NULL) fn
     LEFT JOIN sys.allocation_units au
         ON fn.AllocUnitId = au.allocation_unit_id
     LEFT  JOIN sys.partitions p
         ON p.partition_id = au.container_id
     LEFT  JOIN sys.objects so
         ON so.object_id = p.object_id  
    WHERE 
    (
        (Operation …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server-2008 backup

15
推荐指数
1
解决办法
5万
查看次数

在视图中使用 OPENQUERY 的性能影响

请在 stackoverflow 上查看此问题

我正在使用 EasySoft ODBC 驱动程序将 SQL Server 2008 R2 Express 实例链接到 Interbase,但在从远程服务器获取元数据时遇到了一些困难。从网上看,主要建议都提到使用 OPENQUERY 而不是四部分链接服务器语法。

EG 我目前的(有问题的)方法是......

CREATE VIEW [LIVE].[vwPRDETS]
AS

SELECT *
FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Run Code Online (Sandbox Code Playgroud)

但是在某些表上,调用视图时出现错误...

消息 7353,级别 16,状态 1,第 1 行链接服务器“LBLIVE”的 OLE DB 提供程序“MSDASQL”提供了不一致的元数据。在执行期间提供了一个在编译时找不到的额外列。

此外,我什至无法创建一些视图,因为我得到以下...

消息 7315,级别 16,状态 1,第 1 行 链接服务器“LBLIVE”的 OLE DB 访问接口“MSDASQL”包含多个与名称“SYSDBA”.“AUDIT_LBABKP”相匹配的表。

虽然只提到了其中一张表。

搜索网络的替代方法似乎更像是......

SELECT *
FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,如果我在视图定义中使用 OPENQUERY,SQL Server 是否能够优化发送到 Interbase 的结果 SQL?或者这两种方法之间真的没有太大区别?

这是一个交叉主题,会喜欢 dba 的 POV。

sql-server-2008

15
推荐指数
1
解决办法
2万
查看次数

可能对我的 SQL 服务器进行攻击?

检查我的 SQL Server 日志,我看到几个这样的条目:

Date: 08-11-2011 11:40:42
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:42
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.


Date: 08-11-2011 11:40:41
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:41
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.
Run Code Online (Sandbox Code Playgroud)

等等..这可能是中国人对我的 SQL Server 的攻击吗???!我在 ip-lookup.net 上查找了 IP 地址,它说它是中文的。 …

sql-server-2008 sql-server

15
推荐指数
5
解决办法
8458
查看次数

附加/分离与备份/恢复

我需要将数据库(作为一个整体)传输到另一台服务器,以制作一个重复的数据库来设置另一个测试环境。

我有两个选择:

  1. 在源服务器上进行完整备份/在目标服务器上进行还原;
  2. 在源服务器上分离/在目标服务器上附加。

根据我的要求,这两种解决方案的优缺点是什么?

我正在使用 SQL Server 2008 企业版。

sql-server-2008 sql-server backup restore

15
推荐指数
3
解决办法
1万
查看次数

SQL Server VARCHAR 列宽

在网上搜索,我发现在指定过宽的 VARCHAR 列时是否会影响性能的建议相互矛盾,例如 VARCHAR(255) 时 VARCHAR(30) 可能会这样做。

我一致认为,如果整行超过 8060 字节,性能会受到影响。除此之外,我看到了分歧。

索赔是真的The default is SET ANSI PADDING ON = potential for lots of trailing spaces吗?只要总行宽小于 8060,过大的 VARCHAR 列是否有任何真正的性能问题?

列宽很重要的证据


The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need.

http://www.sql-server-performance.com/2007/datatypes/


  • Length is a constraint on the data (like CHECK, FK, NULL etc)
  • Performance when the row exceeds 8060 bytes
  • Can not have unique constraint or index (key column width must …

sql-server-2008 sql-server varchar

15
推荐指数
1
解决办法
6441
查看次数

用于存储标志数组的数据类型(位图/位数组)

我需要为表的每条记录存储一个位数组,支持以下操作:

  • 测试是否设置了位,并设置了位(使用 SQL)

  • 使用 ADO 2.8(不是 ADO.NET)查询和设置值

  • 索引(为了从“覆盖索引”功能中受益)

要存储在此数组中的最大位数是固定的,但可能会超过 32。也就是说,一个简单的int列并不总是有效。

从我目前所见,我的选择是:

  1. 使用多个int
  2. 使用bigint(只要位数 <= 64 即可)
  3. 使用二进制
  4. ?

第一个选项可行,但需要对访问数据的代码进行大量重构。第二个选项只是暂时的缓解,从我目前的搜索来看,我不太确定 ADO 是否与bigint一起工作得那么好。我没有使用binary 的经验,我不知道任何其他选项。

根据要求,您会选择哪种数据类型?

sql-server-2005 sql-server-2008 sql-server datatypes

15
推荐指数
1
解决办法
2万
查看次数

快速查看为 SQL Server 分配了多少 RAM?

使用 SQL Server 2005,您可以查看任务管理器,至少可以粗略地查看分配给 SQL Server 的内存量。

在 SQL Server 2008 中,工作集或提交大小从未真正超过 500 MB,即使 SQLServer:Memory Manager/Total Server Memory (KB) perf 计数器指出 16,732,760。

是否有设置可以在任务管理器中实际显示服务器内存?或者是因为他们改变了 SQL Server 中内存的使用方式

sql-server-2005 sql-server-2008 sql-server memory

15
推荐指数
2
解决办法
7万
查看次数