function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
KenAllredKenAllred 

Is it normal for someone to ask for a login to our SFDC org to help us write an apex trigger?

I had someone reach out and offer to help me with some of the Apex trigger work I've been looking at. The first thing they asked for was a login to our SFDC organization. That surprised me as i wasn't expecting that. If this is normal, I just wanted to get some confirmation. And if they do need access, could i just give them access to our sandbox?

 

LIving in a world of too many scams has me a little paranoid and I want to make sure I don't make a mistake.

 

Thanks!

Best Answer chosen by Admin (Salesforce Developers) 
sfdcfoxsfdcfox
You have a right to be paranoid. A user given the username and password to an account with sufficient privileges required to write Apex Code could bring your organization to its knees. However, it is only one of four ways to allow them access to the system right now.

The first method is a username and password. A smart organization would use a separate license, and set them up with a custom profile with only permissions related to editing Apex Code (to prevent them from altering profiles, resetting users password, etc). Not all organizations have a spare license though, so that isn't always practical, but definitely the advised route when practical.

The second route is to clone the necessary items into a separate developer organization, and have them use that. Since developer organizations are free and disposable, and not tied to your current organization in any way, this is a harmless way to give them the tools they need without the access that any organization would be hesitant to hand out. It can complicate redeployment, though, and isn't always possible to pull off. For example, organizations developing extensions for managed packages they do not own, etc, might not be able to use this route.

The third means, which you suggested, is to let them loose in a Sandbox. For added security, it could be a Developer Only sandbox so they are limited to the information they can access as well. This eases deployment, limits the security risk of data exposure/loss/theft, and can be easily recovered in the event that they try to take over the Sandbox. Not all organizations have a spare sandbox, though, so this isn't always possible, either.

The fourth method is unlike the other three, in that it requires no username or password to be exchanged. Unfortunately, it's hard for an average developer to ever have access to this feature, which is a shame, because it is powerful. For this to work, the developer must be an ISV partner, and must have an approved managed package on the AppExchange. Once installed, the organization can use "grant login access" to provide UI access through a login link that will appear in the managed package org. Unfortunately, due to the conditions of being an ISV, not all developers can afford to go through this process, and they have to have a legitimate application on top of it; security team wouldn't just pass a no-component app just for the sake of login access functionality.

In the near future, we'll be able to use OAuth2 to keep connected to organizations that we are developing for. This means that the developer can be given a revocable token that doesn't expose a username or password for the purposes of development. This will help alleviate that concern, since passwords will no longer have the requirement of being exchanged, and without the hassles associated with becoming an ISV/creating a package.

All Answers

bob_buzzardbob_buzzard

When you say reach out and offer to help, is that through the community or is it paid work?  If its through these boards that is very unusual - I'd expect people to post responses directly to the boards rather than take it offline.  

 

To give you a yardstick, I've never had access to anyone's org - either production or sandbox - and I have over a thousand solutions to my name.

 

From a security perspective, I'd never consider giving anyone that wasn't contracted to work for me access to my Salesforce org - while a sandbox may not have customer information I'm pretty sure it has the names, roles and contact information for your staff.

 

sfdcfoxsfdcfox
You have a right to be paranoid. A user given the username and password to an account with sufficient privileges required to write Apex Code could bring your organization to its knees. However, it is only one of four ways to allow them access to the system right now.

The first method is a username and password. A smart organization would use a separate license, and set them up with a custom profile with only permissions related to editing Apex Code (to prevent them from altering profiles, resetting users password, etc). Not all organizations have a spare license though, so that isn't always practical, but definitely the advised route when practical.

The second route is to clone the necessary items into a separate developer organization, and have them use that. Since developer organizations are free and disposable, and not tied to your current organization in any way, this is a harmless way to give them the tools they need without the access that any organization would be hesitant to hand out. It can complicate redeployment, though, and isn't always possible to pull off. For example, organizations developing extensions for managed packages they do not own, etc, might not be able to use this route.

The third means, which you suggested, is to let them loose in a Sandbox. For added security, it could be a Developer Only sandbox so they are limited to the information they can access as well. This eases deployment, limits the security risk of data exposure/loss/theft, and can be easily recovered in the event that they try to take over the Sandbox. Not all organizations have a spare sandbox, though, so this isn't always possible, either.

The fourth method is unlike the other three, in that it requires no username or password to be exchanged. Unfortunately, it's hard for an average developer to ever have access to this feature, which is a shame, because it is powerful. For this to work, the developer must be an ISV partner, and must have an approved managed package on the AppExchange. Once installed, the organization can use "grant login access" to provide UI access through a login link that will appear in the managed package org. Unfortunately, due to the conditions of being an ISV, not all developers can afford to go through this process, and they have to have a legitimate application on top of it; security team wouldn't just pass a no-component app just for the sake of login access functionality.

In the near future, we'll be able to use OAuth2 to keep connected to organizations that we are developing for. This means that the developer can be given a revocable token that doesn't expose a username or password for the purposes of development. This will help alleviate that concern, since passwords will no longer have the requirement of being exchanged, and without the hassles associated with becoming an ISV/creating a package.
This was selected as the best answer
KenAllredKenAllred
So the situation was that I had asked for help writing an Apex trigger on these boards and someone sent me a private message letting me know they would help me with it. I responded and said that would be awesome and the next email I got from them was "What's your username and password?" That one stopped me in my tracks, but then I started wondering if maybe they needed access to be able to help me with the trigger (e.g. needed to see how we're setup, custom objects, etc.), which is what prompted my post here.
KenAllredKenAllred

This response was incredibly helpful for me (as a new SFDC admin) on what to expect and the possible solutions I can use if/when I want to give someone access to our specific environment to help us out.

 

Thank you!

sfdcfoxsfdcfox
I normally build the solution in my own developer org then send them the solution once I'm reasonably satisfied it should work. Of course, this doesn't always work, and a username and password can often speed deployment. For example, a recent piece I did took nearly two hours of building objects, fields, etc before I could even work on the related code. You can imagine that it would have been far easier to have the original objects to begin with. However, I always wait until I am offered access, unless I come to a point where I can't continue without it, in which case only then would I ask. Passwords are dangerous, and we should always be cautious with exposing them. I personally dislike handling passwords if I can help it, because if limits my exposure to legal actions if anything goes wrong.